UEDL3-4——折叠、折叠组

本章代码关键字

1
2
3
EditorGUILayout.Foldout()                    //折叠控件,一般配合其他控件使用,它常用于控制控件的显示隐藏,需要配套bool变量
EditorGUILayout.BeginFoldoutHeaderGroup() //折叠组控件,折叠控件差不多,都是控制控件的显示隐藏,需要配套bool变量
EditorGUILayout.EndFoldoutHeaderGroup() //和折叠组控件配套使用,与上一句一起将需要控制显示隐藏的控件包裹起来

折叠控件

Foldout​折叠控件一般配合其他控件使用,它常用于控制控件的显示隐藏,折叠控件显示隐藏的控制通过改变其对应的bool​值,
进而控制if​语句来决定哪些控件的绘制语句会执行,折叠控件本质是点击改变控件对应的bool​值

该控件同样需要一个bool​变量来表示该控件是否显示,需要将该变量传入到方法内,再由该变量接收本帧用户输入的值

  • 参数一:当前是否显示
  • 参数二:文本标题(可改为GUIContent​)
  • 参数三:文本标题是否也可以点击(可选,默认false​)
  • 参数四:GUIStyle
  • 返回值:本帧是否继续显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int i, i1, i2;
long l;
float f;
double d;
string s;
Vector2 vector2;
Vector3 vector3;
Vector4 vector4;
Rect rect;
Bounds bounds;
BoundsInt boundsInt;

bool isShow;

private void OnGUI()
{
isShow = EditorGUILayout.Foldout(isShow, "折叠控件", true);
if (isShow)
{
i = EditorGUILayout.IntField("Int输入框", i);
l = EditorGUILayout.LongField("long输入框", l);
f = EditorGUILayout.FloatField("Float 输入:", f);
d = EditorGUILayout.DoubleField("double 输入:", d);

s = EditorGUILayout.TextField("Text输入:", s);
vector2 = EditorGUILayout.Vector2Field("Vec2输入: ", vector2);
vector3 = EditorGUILayout.Vector3Field("Vec3输入: ", vector3);
vector4 = EditorGUILayout.Vector4Field("Vec4输入: ", vector4);
rect = EditorGUILayout.RectField("rect输入: ", rect);
bounds = EditorGUILayout.BoundsField("Bounds输入: ", bounds);
boundsInt = EditorGUILayout.BoundsIntField("BoundsInt输入: ", boundsInt);
}
i1 = EditorGUILayout.IntField("Int即时输入框", i1);
EditorGUILayout.LabelField(i1.ToString());
i2 = EditorGUILayout.DelayedIntField("Int延迟输入框", i2);
EditorGUILayout.LabelField(i2.ToString());

}

效果如下

  • 折叠时:image
  • 展开时:image

折叠组控件

BeginFoldoutHeaderGroup​的作用和折叠控件差不多,都是控制控件的显示隐藏,
区别是该控件还需要执行一个EndFoldoutHeaderGroup​方法,显示效果和折叠控件也有细微的差别

该控件同样需要一个bool​变量来表示该控件是否显示,需要将该变量传入到方法内,再由该变量接收本帧用户输入的值

  • 参数一:当前是否显示
  • 参数二:文本标题(可改为GUIContent​)
  • 参数三:GUIStyle
  • 参数四:是否折叠状态变化时会执行的委托
  • 参数五:图标的GUIStyle
  • 返回值:本帧是否继续显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int i1, i2;
bool isShowGroup;

private void OnGUI()
{
isShowGroup = EditorGUILayout.BeginFoldoutHeaderGroup(isShowGroup, "折叠组控件");
if (isShowGroup)
{
i1 = EditorGUILayout.IntField("Int即时输入框", i1);
EditorGUILayout.LabelField(i1.ToString());
i2 = EditorGUILayout.DelayedIntField("Int延迟输入框", i2);
EditorGUILayout.LabelField(i2.ToString());
}
EditorGUILayout.EndFoldoutHeaderGroup();
}

效果如下

  • 折叠时:image
  • 展开时:image