読者です 読者をやめる 読者になる 読者になる

青空の月

Unity, C#, アプリ開発関連について。

Drag&Dropしたファイルの絶対パスを取得する

unity Editor拡張

UnityEditorにはエディタ拡張で簡単にドラッグ&ドロップ使える機能が備わっている。

 http://docs-jp.unity3d.com/Documentation/ScriptReference/DragAndDrop.html

 

Unityの機能なのでAssetsフォルダ配下のものなら更に便利に使える。こちらのブログではInspector上でドラッグ&ドロップについて書かれている。Assetsフォルダ配下だからAssetDatabaseを使ってゴニョゴニョできる。

もちろん、ファイル以外にHierarchyビューのゲームオブジェクトとかもドロップできる。

 

ただ残念なことに、ファイルのパスはちょっといまいちかも。DragAndDrop.pathsで対象のパスを取得できるけど、プロジェクト配下のファイルはプロジェクトフォルダをRootとした相対パスで、プロジェクト配下ではないものは絶対パスになる。

 

プロジェクト外のファイルも同じように処理したい事もあるので、プロジェクト配下のファイルも絶対パスにするようにしてみた。

 

 

サンプルとしてこんなフォルダ構成でPJを作ってみた。

f:id:masa795:20130514124740p:plain

https://docs.google.com/file/d/0B0QQUxwJA5IPQXpybzNpQXZVZGs/edit?usp=sharing

 

「DragDropPJ」フォルダがUnityのプロジェクトフォルダのルート。

 

Assetsフォルダより下の「333」フォルダがあるファイルとかをドロップするとこうなる。上の「DragAndDrop.path」がDragAndDrop.pathsで取得できるパス。その下の「FullPath」が絶対パスに変換した結果。

プロジェクト内のファイルはプロジェクトルートから見た相対パスになっている。

f:id:masa795:20130514125645p:plain

 

 

プロジェクト外のファイルは絶対パスになっている。

f:id:masa795:20130514130220p:plain

 

今回使用したスクリプト。まぁ力技で、 パスが「Assets/」で始まるかどうかで判別してるだけ。

ちなみにプロジェクトフォルダ以下のTempとかLibraryフォルダは正しく取得できない。多分ココからドロップはしないだろうと思うし。

 

 

参考

http://warapuri.tumblr.com/post/24185933889/unity-inspector-editor-drag-drop