FC2ブログ
ヽ|∵|ゝ(Fantom) の 開発blog? ホーム » Unity »【Unity】【C#】ランタイム時にファイルをドラッグ&ドロップして取得する(Windows のみ)

【Unity】【C#】ランタイム時にファイルをドラッグ&ドロップして取得する(Windows のみ)  


 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 ドロップダウンの要素をコードで設定と取得、外観のカスタマイズなど


関連記事
スポンサーサイト



category: Unity

thread: ゲーム開発

janre: コンピュータ

tag: Unityオープンソースライブラリ  Unityライブラリ 
tb: 0   cm: --


トラックバック

トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/315-1e419792
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

Social

検索フォーム

全記事一覧

カテゴリ

ユーザータグ

最新記事

リンク

PR