フィールドをまとめて開く/閉じるとしたいときは、Foldoutを使います。
まずメンバ変数に、フォルダの状態を保持する変数を用意し、
private bool foldoutStatus = true;
フォルダが開いているときに表示する項目をOnInspectorGUIに書きます。
EditorGUILayoutSample obj = target as EditorGUILayoutSample; foldoutStatus = EditorGUILayout.Foldout (foldoutStatus, "Folder"); if (foldoutStatus) { obj.address = EditorGUILayout.TextField ("address", obj.address); obj.intValue = EditorGUILayout.IntField ("intValue", obj.intValue); obj.floatValue = EditorGUILayout.FloatField ("floatValue", obj.floatValue); obj.doubleValue = EditorGUILayout.DoubleField ("doubleValue", obj.doubleValue); obj.boundsValue = EditorGUILayout.BoundsField ("boundsValue", obj.boundsValue); }
これで、開閉されるフォルダができます。
開いているとき
閉じているとき
これと似た機能として、なめらかにアニメーションして閉開するものもあります。
こちらはBeginFadeGroup~EndFadeGroupを使用します。
これはちょっと特殊で、指定されたfloat値の0.0~1.0で表示している状態を決めていくというもの。AnimBoolなどと組み合わせて使うみたい。
例として、メンバ変数に閉会状態を保持するAnimBoolを用意して、
private AnimBool fadeGroupStatus;
OnEnableで初期化します。
AnimBoolはbool値が変化したときに内部で保持しているfloat値が0~1と変動して、タイミングごとにコールバックが呼ばれるというもの。
ここでListeerにRepaintを指定して、値が変化するたびに再描画されるようにします。
public void OnEnable() { fadeGroupStatus = new AnimBool (true); fadeGroupStatus.valueChanged.AddListener (Repaint); }
最後に、OnInspectorGUIでそれが開ききったときに表示される項目を指定します。
EditorGUILayoutSample obj = target as EditorGUILayoutSample; fadeGroupStatus.target = EditorGUILayout.ToggleLeft ("fadeGroup", fadeGroupStatus.target); if (EditorGUILayout.BeginFadeGroup (fadeGroupStatus.faded)) { obj.address = EditorGUILayout.TextField ("address", obj.address); obj.intValue = EditorGUILayout.IntField ("intValue", obj.intValue); obj.floatValue = EditorGUILayout.FloatField ("floatValue", obj.floatValue); obj.doubleValue = EditorGUILayout.DoubleField ("doubleValue", obj.doubleValue); obj.boundsValue = EditorGUILayout.BoundsField ("boundsValue", obj.boundsValue); } EditorGUILayout.EndFadeGroup ();
開いているとき
閉じているとき
チェックボックスをONにすると開き、OFFにすると閉じられます。
画像だとわかりづらいのですが、これが閉開するときにするするっとアニメーションして、開いたり閉じたりするのです。
これは一例で、要はBeginFadeGroupに渡すfloat値が随時変化し、trueのときにフィールドを描画するような処理ができればよさそうなので、他にも応用があるかもしれません。