ちゃこブログ

お絵かきとUnityとBlenderと日記

【Unity】ReorderableListについて小ネタ ( UnitySceneMenuを作って学んだこと )

ReorderableListは怖くないよ!
検索してみるとinspectorで表示するためのサンプルばかりで、私自身もinspectorでの表示にしか使ったことがなかったのですが、EditorWindowでも簡単に表示させることが可能でした。

以下はReorderableListを使ってみて得た知見や感想です。

ReorderableListをHorizontalScope内で使ってはならない

(悲劇が起きます)

f:id:charcotte:20180211110839p:plain
全ての要素が横並びに!!
HorizontalScope内で使用する場合は、DOLayoutList()を一旦VerticalScopeで囲んであげましょう。

ReorderableListを自作ボタンで操作するときの注意点

ReorderableListはデフォルトで要素の追加・削除ボタンが付属していますが、UnitySceneMenuのように自分でボタンを作成する場合に、ReorderableListのいくつかのコールバックが呼ばれないみたいです。
デフォルトボタン以外からReorderableListの要素を追加しても、onAddCallbackやonRemoveCallbackは呼ばれませんでした。
自作する場合はコールバックに登録するのではなく、ボタンに処理したいメソッドを登録しておきましょう。

参照が良くわからない…

C#デキナイなので、ReorderableList内で表示される要素が、ReorderableList外で値を更新したときにうまく反映されなくて原因が分からず困っていました。
今回の実装の話だと、ScriptableObject内のリストからReorderableListを作成しています。BuildSettingsが更新された際に自分自身がビルドシーンかどうかのフラグを更新してシーンアイコンの表示を切り替えるのですが、ReorderableList内の要素は更新がされませんでした。
MenuのReorderableListを作成するときに、Menuが持つSceneすべてに更新かけることで対応できました。
うまく言葉がまとまらないのですが、ReorderableListは要素のindexは更新できるが、Listのクラスまで更新をかけられない・・?
うーん勉強不足感。

参考にさせて頂いたサイト

kan-kikuchi.hatenablog.com