なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ

書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

2020/04/18

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

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

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


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

UnityEditor.DragAndDrop - Unity スクリプトリファレンス

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

まず、初めに 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 実装でした。