[Unityエディター拡張] フィールドをフォルダでまとめる

ヨメレバCSS
オリジナルCSS

フィールドをまとめて開く/閉じるとしたいときは、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);
}

これで、開閉されるフォルダができます。

開いているとき

2_13_foldout

閉じているとき

2_13_foldout2

これと似た機能として、なめらかにアニメーションして閉開するものもあります。

こちらは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 ();

開いているとき

2_13_fadegroup

閉じているとき

2_13_fadegroup2

チェックボックスをONにすると開き、OFFにすると閉じられます。

画像だとわかりづらいのですが、これが閉開するときにするするっとアニメーションして、開いたり閉じたりするのです。

これは一例で、要はBeginFadeGroupに渡すfloat値が随時変化し、trueのときにフィールドを描画するような処理ができればよさそうなので、他にも応用があるかもしれません。

スポンサーリンク
GoogleAdSence レクタングル(大)

シェアする

スポンサーリンク
GoogleAdSence レクタングル(大)