Unityでファイルをdrag&dropしてファイルパスを取得する


gitでダウンロードする。

https://github.com/Bunny83/UnityWindowsFileDrag-Drop

それを解凍して、その中にあるファイルをAssetにDrag&Drop

FileDragAndDrops.csを以下のようにアタッチする(ctrl + s で上書きしちゃって良い)。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; //追加
using System.Linq;
using B83.Win32;


public class FileDragAndDrop : MonoBehaviour
{
    public Text display; //インスペクタで出力するUI-Textを登録

    List<string> log = new List<string>();
    void OnEnable ()
    {
        // must be installed on the main thread to get the right thread id.
        UnityDragAndDropHook.InstallHook();
        UnityDragAndDropHook.OnDroppedFiles += OnFiles;
    }
    void OnDisable()
    {
        UnityDragAndDropHook.UninstallHook();
    }

    void OnFiles(List<string> aFiles, POINT aPos)
    {
        // do something with the dropped file names. aPos will contain the 
        // mouse position within the window where the files has been dropped.
        string str = "Dropped " + aFiles.Count + " files at: " + aPos + "\n\t" +
            aFiles.Aggregate((a, b) => a + "\n\t" + b);
        // pathはaFiles[0]の中に格納されてる
        // なぜかDebug出力されない?
        Debug.Log(str);
        // log.Add()で画面の左上に出力される
        log.Add(str);

        //UI-Text に出力
        if (display != null)
        {
            display.text = ("Dropped " + aFiles.Count + " files at: " + aPos + "\n" +
                aFiles.Aggregate((a, b) => a + "\n" + b));
        }
    }
    // 実行中はデバッグログ出ないからpathを表示する用
    private void OnGUI()
    {
        if (GUILayout.Button("clear log"))
            log.Clear();
        foreach (var s in log)
            GUILayout.Label(s);
    }
}

HierarchyでCreate Emptyする(GameObjectという名前で出来上がる)。

GameObjectに、アセットしたスクリプトファイルをAdd Componentする。

UnityでFile → Build SettingsでStandaloneに設定してBuild And Runを押す。



これで全画面でアプリが動くから、そこにファイルDorag&Dropすればパスが表示される。

ファイルのパスはaFiles[0],ドロップしたときの座標はaPosに格納されています。
また,アプリを実行しないとファイルのドロップ判定がされないようなので,更新するごとにCtrl+Bで実行してください.