(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



アセット(ファイル)をドラック&ドロップで取得するエディタ拡張【Unity】【エディタ拡張】


このエントリーをはてなブックマークに追加



この記事でのバージョン
Unity 2019.4.17f1


はじめに

今回はアセット(ファイル)をドラック&ドロップで取得するエディタ拡張を作ってみた話です!

f:id:kan_kikuchi:20210120064713g:plain


ちなみに以前、

Inspectorにファイルをドラック&ドロップしてパスを設定するという記事も書いていました。

f:id:kan_kikuchi:20160822134940g:plain




アセット(ファイル)をドラック&ドロップで取得するエディタ拡張

まずUnityにはUnityEditor上で行われるドラッグ&ドロップを操作するクラスDragAndDrop

というものがあり、そのobjectReferencesで現在ドラッグされている物を参照出来ます。

//現在ドラッグされている物を取得
Object[] objectReferences = DragAndDrop.objectReferences


なので後はドラック&ドロップするためのエリアを描画して、

そのエリア内にマウスカーソルがある時だけドラッグ&ドロップの処理をすればいいだけという事です。


今回はそこら辺の処理をまとめて、

簡単にドラック&ドロップでオブジェクトを取得するGUIを表示するクラス

DragAndDropAreaUtilityを作ってみました!



具体的には以下のような感じで使います。

//使いまわし用
private readonly List<AudioClip> _audioClips = new List<AudioClip>();
  
//=================================================================================
//表示するGUIの設定
//=================================================================================

private void OnGUI() {

  //Sprite単体を取得するエリア表示
  var sprite = DragAndDropAreaUtility.GetObject<Sprite>("Sprite単体を取得するエリア");
  if (sprite != null) {
    Debug.Log($"Spriteの{sprite.name}を取得");
  }
   
  GUILayout.Space(30);
    
  //AudioClipを複数を取得するエリア表示
  if (DragAndDropAreaUtility.GetObjects(_audioClips, "AudioClipを複数を取得するエリア")) {
    foreach (var audioClip in _audioClips) {
      Debug.Log($"AudioClipの{audioClip.name}を取得");
    }
    _audioClips.Clear();
  }
}
f:id:kan_kikuchi:20210120064713g:plain