Listを作った時、Inspectorで要素の順番変えたり簡単に消去できないのが辛い。
環境:Unity2019.4.17
ReorderableList
Editor拡張でいい感じにしてくれるのあるだろうと検索したらあった!
ReorderableList!Unityデフォルトの?機能らしい!!
よくUnityのSettingとかで見るやつだ~!
+-で追加して、順番も入れ替える
公式のはずなのに、リファレンスない?
この機能は公式としてドキュメント化されておらず非推奨扱いとなっていますが、Animator や Tag and Layer の設定画面で長い間使われているので、すぐに使えなくなることはないと思います。
だって
Unity組み込みなんだから簡単に使えるのかと思ったら、スクリプトごとにEditorファイル作らないといけないっぽい?
使う
こちらの記事の方が作ったEditor拡張のアセットみたいなのを使う
Releaseからunitypackageを落としてUnityにいれる。
Listが含まれるスクリプトはすでにあるとして、このクラス名(test)とリスト名(NameList)を、Editor拡張で使う。
この時点ではまだListはいつもの形式。
数字入れて要素増やすやつ
Editor拡張作る
アセットダウンロードしたからと言って、Editor拡張を自分で作らなくていいわけではないらしい
どこかにEditorフォルダを作って、その中に適当なスクリプトを作る。
ReorderableListEditor.csにした。
中身こんな感じにする
書き換え
・[CustomEditor(typeof(test))]
testの部分は使いたいクラス名
・serializedObject.FindProperty("NameList")
NameListにリスト名
つまづいたとこ
・namespace Mochineko.SimpleReorderableList.Samples.Editorを付ける
usingだとだめだった。
・public class ReorderableListEditor : UnityEditor.Editor
UnityEditorつけないとダメ
完成
これでできた!
自作クラスで使う
自作クラスのリストでもできる!
自作クラスの作り方はここ
他のプロパティが表示されない><
指定のList以外に他のプロパティを設定しても表示されない
Editorスクリプトで指定したものしか表示されないんだけど・・・
どうしたらいいんだろう。Editor拡張分からな過ぎて、アセットの問題なのかも分からない。他のReorderableListで試さないと
別の使う①
こちら
これはEditorスクリプトは書かずに、使いたいプロパティに[ReorderableList]を付けるタイプ!
しかもListじゃない他のプロパティと組み合わせれた!
ただ、用意されていない型は自分でどうにかしないといけない。
あとScriptableObjectで使ったら変にならないかな?
今回の私の用途にはいろいろ問題ありそう
別の使う②(えらー→解決)
最初この記事をまねしてたけど
Editorのスクリプトでエラー出た
1個目のserializedObject
仕様が変わったのか??
えーーーん
解決
FindPropertyRelativeをFindPropertyにしたらエラー消えた。
これで使えるようになった!ほかのプロパティも表示されている。
通常のList表示はそのまま、Inspectorの一番下にReordavleListもタイトルだけ追加で表示されるという不思議な形式。
でも上の普通のリスト表示と動きは同期しているので、内容は上のリストに書いて、順番を変えたり要素の追加消去はReordableListで変更できるようになりました。
(おまけ)プロパティとフィールド
publicがプロパティで、privateがフィールド?
そういう単純な問題じゃなさそう
今回のListはプロパティかな?
最後に
UnityのRoadMapにあるらしい!
ReorderableListいじりたくないので、p.52の Re-orderable arrays & lists in inspector が早く欲しいです、Unity先生。たぶんデフォルトで並べ替えられる感じになるんだと思うけど。 https://t.co/mzKQItbvWc
— こりん / 69.50kg (@korinVR) 2020年6月19日
本当だ!
早く出てほしい
結局やりたいことできなかった・・・
私が死ぬしかない