フィールドをまとめて開く/閉じるとしたいときは、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のときにフィールドを描画するような処理ができればよさそうなので、他にも応用があるかもしれません。