GUILayout类和EditorGUILayout类
目录
- GUILayout类和EditorGUILayout类
一、GUILayout 类
官方中文文档
1.布局
BeginArea 固定区域
BeginHorizontal 和 BeginVertical 水平和垂直布局
BeginScrollView 自动布局的滚动视图
2.Box 创建一个自动布局框
3.按钮类型
Button 和 RepeatButton 按钮
SelectionGrid 选择网格
Toolbar 工具栏
Toggle 开关
4.滚动条和滑动条
HorizontalScrollbar 和 VerticalScrollbar 滚动条
HorizontalSlider 和 VerticalSlider 滑动条
5.输入框
TextField/TextArea 单行/多行输入框
PasswordField 密码输入框
6.Window 弹出窗口
7.展示
Label 展示标签
FlexibleSpace 灵活的空白元素
Space 当前布局中插入空白元素
二、EditorGUILayout 类
官方中文文档
1.布局
BeginHorizontal 和 BeginVertical 水平和垂直布局
BeginScrollView 自动布局滚动视图
BeginToggleGroup 开关组
BeginFadeGroup 显示隐藏组
2.滑动条
Slider 和 IntSlider 滑动条
MinMaxSlider 范围滑动条
3.按钮、开关、下拉框和选择器
Toggle 和 ToggleLeft 开关
Popup、IntPopup 和 EnumPopup 弹出选择框
Popup:
IntPopup:
// num=0 展示出来的是 c
num = EditorGUILayout.IntPopup(num,new string[] { "a","b","c","d"},new int[] { 1,5,0,0});
EnumPopup:
enum OPTIONS{A,B,C}
OPTIONS op = OPTIONS.A;
private void OnGUI()
{
op = (OPTIONS)EditorGUILayout.EnumPopup(op);
}
TagField 和 LayerField 弹出选择框
DropdownButton 对鼠标按下做出反应的按钮
EnumFlagsField 枚举掩码选择框
enum OPTIONS
{
None=0,
A=1<<0,//1-1
B=1<<1,//2-10
C=1<<3,//8-1000
AB=A|B,//3-11
ABC=A|B|C,//11-1011
}
OPTIONS op = (OPTIONS)10;
private void OnGUI()
{
op = (OPTIONS)EditorGUILayout.EnumFlagsField(op);
}
MaskField 掩码的选择框
ColorField 颜色选择器
GradientField Gradient 选择器
CurveField AnimationCurve 动画编辑
Foldout 可折叠的标签
bool foldout = false;
private void OnGUI()
{
GUILayout.BeginVertical();
foldout = EditorGUILayout.Foldout(foldout, "折叠");
if (foldout)
{
if (GUILayout.Button("曲线生成C#代码")){}
}
GUILayout.EndVertical();
}
InspectorTitlebar 窗口标题栏
4.输入框
Bounds 输入框
方法参数对应类型:
| BoundsField | BoundsIntField |
|---|---|
| Bounds | BoundsInt |
Rect 输入框
方法参数对应类型:
| RectField | RectIntField |
|---|---|
| Rect | Rect |
Vector 输入框
方法参数对应类型:
| Vector2Field | Vector2IntField | Vector3Field | Vector3IntField | Vector4Field |
|---|---|---|---|---|
| Vector2 | Vector2Int | Vector3 | Vector3Int | Vector4 |
数字、文本输入框
方法参数对应类型:
| DoubleField | FloatField | IntField | LongField | TextField/TextArea |
|---|---|---|---|---|
| double | float | int | long | string |
Delay 延迟输入框
方法参数对应类型:
| DelayedDoubleField | DelayedFloatField | DelayedIntField | DelayedTextField |
|---|---|---|---|
| double | float | int | string |
PasswordField 密码输入框
ObjectField 输入框
5.展示
GetControlRect 获取编辑器控件的矩形
HelpBox 提示框
LabelField 标签展示
SelectableLabel 可选择标签
PrefixLabel 特定控件前的标签
PropertyField SerializedProperty 生成一个字段
Space 控件之间的空间
三、GUIContent 和 GUIStyle、GUILayoutOption
1.GUILayoutOption
2.GUIContent 类
3.GUIStyle
四、Utility 辅助类
EditorGUIUtility EditorUtility
| ClearDirty | 清除 target 的“脏”标志。 |
|---|---|
| ClearProgressBar | Removes the progress bar. |
| CollectDeepHierarchy | 收集层级视图中以每个指定对象为根对象的所有对象。 |
| CollectDependencies | 计算并返回 roots 中列出的资源所依赖的所有资源的列表。 |
| CompressCubemapTexture | 压缩立方体贴图纹理。 |
| CompressTexture | 压缩纹理。 |
| CopySerialized | 复制 Unity Object 的所有设置。 |
| CopySerializedIfDifferent | 将 Unity Object 的所有设置复制到第二个 Object(如果两者不同)。 |
| CopySerializedManagedFieldsOnly | 在不同的托管对象之间复制可序列化的字段。 |
| CreateGameObjectWithHideFlags | 使用 HideFlags 和指定组件创建游戏对象。 |
| DisplayCancelableProgressBar | 显示或更新含有 Cancel 按钮的进度条。 |
| DisplayDialog | 此方法显示模态对话框。 |
| DisplayDialogComplex | 显示含有三个按钮的模态对话框。 |
| DisplayPopupMenu | 显示弹出菜单。 |
| DisplayProgressBar | 显示或更新进度条。 |
| FocusProjectWindow | 将 Project 窗口置于前面并聚焦该窗口。 |
| FormatBytes | 返回有关字节数的文本。 |
| GetDialogOptOutDecision | 此方法显示模态对话框,使用户可以选择不再次显示当前对话框。 |
| GetDirtyCount | 返回一个整数,指示更改指定对象的序列化属性的次数。 |
| GetObjectEnabled | 对象是否已启用(0 表示已禁用,1 表示已启用,-1 表示没有 Enabled 按钮)。 |
| InstanceIDToObject | 将实例 ID 转换为对对象的引用。 |
| IsDirty | 获取一个布尔值,指示指定对象自上次保存以来是否已更改。 |
| IsPersistent | 确定对象是否存储在磁盘中。 |
| IsRunningUnderCPUEmulation | Gets a boolean value. This value indicates whether your CPU is unable to execute Unity natively and is running an emulated version. |
| NaturalCompare | 仿人类排序。 |
| OpenFilePanel | 显示“打开文件”对话框并返回所选的路径名称。 |
| OpenFilePanelWithFilters | 显示“打开文件”对话框并返回所选的路径名称。 |
| OpenFolderPanel | 显示“打开文件夹”对话框并返回所选的路径名称。 |
| OpenPropertyEditor | Open properties editor for an Object. |
| RequestScriptReload | Unity 编辑器会在下一帧上异步重新加载脚本程序集。这会重置所有脚本的状态,但是 Unity 不会编译任何自上次编译以来已更改的代码。 |
| SaveFilePanel | 显示“保存文件”对话框并返回所选的路径名称。 |
| SaveFilePanelInProject | 在项目的 Assets 文件夹中显示“保存文件”对话框并返回所选的路径名称。 |
| SaveFolderPanel | 显示“保存文件夹”对话框并返回所选的路径名称。 |
| SetCameraAnimateMaterials | 设置此摄像机以启用编辑器中的材质动画。 |
| SetCameraAnimateMaterialsTime | 为此摄像机设置渲染时使用的全局时间。 |
| SetCustomDiffTool | Set custom diff tool settings. |
| SetDefaultParentObject | Sets the default parent object for the active Scene. |
| SetDialogOptOutDecision | 此方法显示模态对话框,使用户可以选择不再次显示当前对话框。 |
| SetDirty | Marks target object as dirty. |
| SetObjectEnabled | 设置对象的启用状态。 |
| SetSelectedRenderState | 为此渲染器将场景视图设置为所选的显示模式。 |
| UnloadUnusedAssetsImmediate | 卸载未使用的资源。 |
| UpdateGlobalShaderProperties | 更新渲染时使用的全局着色器属性。 |
五、扩展
1.动画曲线生成 C# 代码
// 动画曲线生成 C# 代码,生成代码直接复制使用
AnimationCurve curve = new AnimationCurve(new Keyframe(0f, 0f, 0f, 0f), new Keyframe(1f, 1f, 0f, 0f));
private void OnGUI()
{
GUILayout.BeginHorizontal();
curve = EditorGUILayout.CurveField("动画曲线", curve);
if (GUILayout.Button("曲线生成C#代码"))
{
string keys = "new AnimationCurve(";
foreach (Keyframe k in curve.keys)
{
string key = string.Format("new Keyframe({0}f,{1}f,{2}f,{3}f),", k.time, k.value, k.inTangent, k.outTangent);
keys += key;
}
keys = keys.TrimEnd(',');
keys += ")";
Debug.Log(keys);
}
GUILayout.EndHorizontal();
}









