unity Editor コンポーネントをソートする SortComponentsWindow.cs
概要
UnityではGameObjectにアタッチしているコンポーネントの順番を入れ替えたい時
「Move Up」「Move Down」をクリックして移動する。
そのため、好きな順番にソートするのが大変です。
なので今回は、簡単にソートができるエディタウィンドウを作成しました。
使い方
以下のサイトからSortComponentsWindow.csをダウンロード
Applyボタンあり(入れ替え後、ボタンを押して反映)
Applyボタンなし(入れ替えると自動で反映)
Unityにドラック & ドロップするとEditorWindowがでてきます
Sort Components Windowをクリック
適当に配置
ソートしたいオブジェクトをドラック & ドロップ
ドラックしてコンポーネントをドラックして入れ替えできる
プレハブも可能
スクリプト
テストに利用したスクリプト
using UnityEngine; using System.Collections; public class Script_1 : MonoBehaviour { public int value_1; }
using UnityEngine; using System.Collections; public class Script_2 : MonoBehaviour { public int value_2; }
using UnityEngine; using System.Collections; public class Script_3 : MonoBehaviour { public int value_3; }
製作時の問題
「CheckComponentsUpdate ()」を作成した経緯
以下の方法で試したが更新できなかったため手動検知プログラムを作成した
void OnMouseDown() { //更新処理 } void OnValidate() { //更新処理 } private void OnGUI() { EditorGUI.BeginChangeCheck (); ... if (EditorGUI.EndChangeCheck ()){ //更新処理 } }
スクリプトが外れている場合の対処
アタッチしたスクリプト内にある変数の値を表示
m_reorderableList.drawElementCallback = (rect, index, isActive, isFocused) => { EditorGUI.LabelField(rect, SrawElementCallback((Object)m_reorderableList.list[index], index)); };
SrawElementCallbackをSrawElementCallbackCustomに変更する
m_reorderableList.drawElementCallback = (rect, index, isActive, isFocused) => { EditorGUI.LabelField(rect, SrawElementCallbackCustom((Object)m_reorderableList.list[index], index)); };
やってはいけない操作
SortComponentsWindowで同じプレハブを
「プロジェクト」と「ヒエラルキー」の両方で操作を行うと個数が2倍になります。
例
1、プロジェクトにあるプレハブをヒエラルキーに置く
2、ヒエラルキーのプレハブをSortComponentsWindowに入れて操作(コンポーネントの複製と削除)
3、プロジェクトのプレハブをSortComponentsWindowに入れて操作(コンポーネントの複製と削除)
4、(2、3)によりヒエラルキーとプロジェクトのプレハブに差分が発生
5、ヒエラルキーのプレハブにプロジェクトの差分が自動で追加(Unityの機能)
結果ヒエラルキーのコンポーネントの個数が2倍になる
参考
【Unity】SerializedObjectを使用して指定されたオブジェクトのすべてのプロパティのパス名を抽出するエディタ拡張 - コガネブログ
Unity - ReorderableList を使ってインスペクタ上でリストや配列の順番を変更する - Qiita
Unity: make your lists functional with ReorderableList
rotorz / Reorderable List Editor Field for Unity — Bitbucket
Interesting things in Unity 4.5 you probably didn't know about
【エディタ拡張徹底解説】初級編②:いろいろなGUI(GUILayout編)【Unity】 | ケットシーウェア
c# - AddComponent using a variable - Game Development Stack Exchange
様々なEditorWindow① - けいごのなんとか
テックノート – 配列からListへ変換、Listから配列へ変換
Re-orderable object lists in inspector - Unity Answers
=Object.operator
Undo
Undo.AddComponent
MonoBehaviour
[C#]foreach文でループカウンタを取得する方法