【Unity】【C#】ランタイム時にファイルをドラッグ&ドロップして取得する(Windows のみ) 
2018/12/09 Sun [edit]
Unity では標準でランタイム時のファイルのドラッグ&ドロップには対応してないそうで、結局ググって見つけたオープンソースライブラリで解決できたので、同じように検索している人のためにメモとして残しておこう。
|
(※) Unity 2018.2.1f1 - 2.16f1 / Windows10(x64) で確認
■Bunny83/UnityWindowsFileDrag-Drop をインポートする
利用するオープンソースライブラリは「Bunny83/UnityWindowsFileDrag-Drop」だ。Git で落としても良いが、実は dll なども一切無く、実際に利用するファイルは C# ファイル1つだけなので(サンプルは除くとして)、zip で落とした方が楽だろう。
zip を解凍したら、4つのファイルが出てくるのでプロジェクトにインポートする(プロジェクトビューにドロップで良い)。ちなみにドラッグ&ドロップのライブラリは「B83.Win32.cs」だけで、「FileDragAndDrop.cs」はサンプルとなっている。

■簡単なサンプルを作ってみる
実際にランタイムで試すために、「FileDragAndDrop.cs」を適当にアタッチして、UI-Text にドロップしたファイル名を表示するようにしてみよう。適当に Canvas を作って、Text にドロップしたときのログを出力すれば良いだけだ。コードは元のサンプルコードに少し手を加えて、の Debug.Log() 部分をまるっとコピーすれば良い。


●「FileDragAndDrop.cs」に UI-Text への出力を付け加える
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //追加
using System.Linq;
using B83.Win32;
public class FileDragAndDrop : MonoBehaviour
{
public Text display; //インスペクタで出力するUI-Textを登録
UnityDragAndDropHook hook;
//ここでドラッグ&ドロップ機能を登録
void OnEnable ()
{
hook = new UnityDragAndDropHook();
hook.InstallHook();
hook.OnDroppedFiles += OnFiles;
}
//ここでドラッグ&ドロップ機能を解除
void OnDisable()
{
hook.UninstallHook();
}
//ここでドラッグ&ドロップされたファイル名とドロップ位置を取得
void OnFiles(List<string> aFiles, POINT aPos)
{
Debug.Log("Dropped "+aFiles.Count+" files at: " + aPos + "\n"+
aFiles.Aggregate((a, b) => a + "\n" + b));
//UI-Text に出力
if (display != null)
{
display.text = ("Dropped "+aFiles.Count+" files at: " + aPos + "\n"+
aFiles.Aggregate((a, b) => a + "\n" + b));
}
}
}
■実際にビルドしてランタイムで試してみる
「File>Build Settings...」で「Standalone」に切り替えて、作ったサンプルシーンを追加し、「Build And Run」でビルドして起動してみよう。適当にファイルをウィンドウにドラッグ&ドロップすれば、ファイル名が表示されるハズだ。


とても簡単で、既に「VRM Live Viewer」で実装していて、何の問題も無く利用できている。インポートファイルも少ないので管理も楽だ。
また、日本語が入ったパス名でも大丈夫のようだ。パス名だけでなく、ドロップした座標も取得できるので、ドロップした UI によって処理を変えるなんてこともできるだろう。これは色々使えると思う。てゆかこの機能はぜひ標準で欲しいね(笑)。
(関連記事)
【Unity】VRM(VRoid)をライブステージで踊らせるアプリを作ってみた
【Unity】【C#】uGUI ドロップダウンの要素をコードで設定と取得、外観のカスタマイズなど
- 関連記事
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/315-1e419792
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |