みかづきメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

Unity のエディター拡張で D&D を受け入れたい

VRChat でいろいろやっている影響もあって Unity を最近よくいじっているのですが、
大量のオブジェクトの操作をやりたくなったので、エディター拡張を作りました。

ただ、私の知る限り一括で Object を設定できるコントロールは無かった気がしたので、
ドラッグ&ドロップで全てを受け入れてくれるように組んでみたので、そのログです。


調べてみると、なんとそれ用のクラスが用意されていました。

docs.unity3d.com

ということで、これを使って実装していきます。

まず、初めに D&D を受け入れる Box を作成します。

var area = GUILayoutUtility.GetRect(0.0f, 50.0f, GUILayout.ExpandWidth(true));
GUI.Box(area, "Drag and Drop RectTransforms");

次に Box の中へとドロップしようとしていたら受け入れる...という部分を作ります。

if (area.Contains(Event.current.mousePosition))
{
    switch (Event.current.type)
    {
        case EventType.DragUpdated:
            DragAndDrop.visualMode = DragAndDropVisualMode.Copy;
            Event.current.Use();
            break;
            
        case EventType.DragPerform:
            DragAndDrop.AcceptDrag();
        
            var references = DragAndDrop.objectReferences;
            
            DragAndDrop.activeControlID = 0;
            Event.current.Use();
            break;
    }
}

これで、枠内に D&D したオブジェクトが references にはいります。
ということで、エディター拡張での D&D 実装でした。