みんな大好き、ReorderableList
カッコいいエディタ拡張の代名詞たるReorderableList、好きですよね。しかし実際に使おうとすると、ReorderableListはUnityEditorInternalに入っている関係上、マニュアルはおろか、リファレンスすらありません。幸いすでにたくさんの方がその使い方を記事にされており、私もそれらを参考に実装していました。それでもなおその使い方はかなり煩雑で、だいぶめんどくさかったのです。
しかし先日Unity 2020.1のリファレンスを眺めていたところ、以下のような項目が。
Unity - Scripting API: UIElements.ListView.reorderable
なんとUI ElementsのほうのListViewにreorderableというプロパティが実装されていました。プロパティいっこ設定するだけでReorderableにできるというのです。これは試さなくては!
意気揚々と実装してみた結果が以下になります。
えっなんか違う……
reorderableってそういう……?
そんなにカッコよくはないけどまあ便利そうなので
以下、今回のコードです。
SampleList.cs
using System;
using UnityEngine;
public class SampleList : MonoBehaviour
{
public SampleListItem[] items;
}
[Serializable]
public class SampleListItem
{
public string key;
public string value;
}
SampleListEditor.cs
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine.UIElements;
[CustomEditor(typeof(SampleList))]
public class SampleListEditor : Editor
{
public override VisualElement CreateInspectorGUI()
{
var root = new VisualElement();
var list = new ListView();
list.bindingPath = "items";
list.reorderable = true;
list.itemHeight = 70;
list.style.flexGrow = 1;
root.Add(list);
root.Bind(serializedObject);
root.style.height = 200;
return root;
}
}
まあ実装は楽だし入れ替えは便利だし……