Drag&Dropしたファイルの絶対パスを取得する
UnityEditorにはエディタ拡張で簡単にドラッグ&ドロップ使える機能が備わっている。
http://docs-jp.unity3d.com/Documentation/ScriptReference/DragAndDrop.html
Unityの機能なのでAssetsフォルダ配下のものなら更に便利に使える。こちらのブログではInspector上でドラッグ&ドロップについて書かれている。Assetsフォルダ配下だからAssetDatabaseを使ってゴニョゴニョできる。
もちろん、ファイル以外にHierarchyビューのゲームオブジェクトとかもドロップできる。
ただ残念なことに、ファイルのパスはちょっといまいちかも。DragAndDrop.pathsで対象のパスを取得できるけど、プロジェクト配下のファイルはプロジェクトフォルダをRootとした相対パスで、プロジェクト配下ではないものは絶対パスになる。
プロジェクト外のファイルも同じように処理したい事もあるので、プロジェクト配下のファイルも絶対パスにするようにしてみた。
サンプルとしてこんなフォルダ構成でPJを作ってみた。
https://docs.google.com/file/d/0B0QQUxwJA5IPQXpybzNpQXZVZGs/edit?usp=sharing
「DragDropPJ」フォルダがUnityのプロジェクトフォルダのルート。
Assetsフォルダより下の「333」フォルダがあるファイルとかをドロップするとこうなる。上の「DragAndDrop.path」がDragAndDrop.pathsで取得できるパス。その下の「FullPath」が絶対パスに変換した結果。
プロジェクト内のファイルはプロジェクトルートから見た相対パスになっている。
プロジェクト外のファイルは絶対パスになっている。
今回使用したスクリプト。まぁ力技で、 パスが「Assets/」で始まるかどうかで判別してるだけ。
ちなみにプロジェクトフォルダ以下のTempとかLibraryフォルダは正しく取得できない。多分ココからドロップはしないだろうと思うし。
参考
http://warapuri.tumblr.com/post/24185933889/unity-inspector-editor-drag-drop