废少,学习笔记
学习的教程地址
- EditorGUI常用组件学习(渲染组件部分)
- 说明
- 组件学习
- 1、labelField 标签字段
- 2、 TextField 文本字段
- 3、TextArea 文本区域
- 4、PasswordField 密码字段
- 5、DropdwonButton 下拉按钮
- 6、Toggle和ToggleLeft 勾选项(开关)
- 7、HelpBox 帮助框
- 8、ColorField 取色器
- 9、BoundsField 包围盒属性框
- 10、CurveField 曲线编辑框
- 11、DelayedTextField 延迟文本框
- 12、EnumFlagsField 多选枚举选项
- 13、Foldout 折叠块
- 14、BeginDisabledGroup一组可禁用的控件
- 其他部分
- 文档地址
针对编辑器的渲染API,内容更加多且复杂。
这些方法的运行方式与常规 GUI 函数十分相似,并且在 EditorGUILayout 中也有匹配实现。(此句摘自文档)
注:在继承了EditorWindow的类中编写……
组件学习 1、labelField 标签字段
Rect mLabelRect = new Rect(20, 20, 50, 30);
void OnGUI()
{
EditorGUI.LabelField(mLabelRect, "你好啊~");
}
2、 TextField 文本字段
Rect mTextRect = new Rect(20, 10, 100, 30);
Rect mLabelRect = new Rect(20, 50, 100, 30);
string mTextFieldValue = "123";
void OnGUI()
{
mTextFieldValue = EditorGUI.TextField(mTextRect, mTextFieldValue);
EditorGUI.LabelField(mLabelRect, mTextFieldValue);
}
3、TextArea 文本区域
略……和TextField一样就不再写了,就是显示效果多了个多行显示
4、PasswordField 密码字段Rect mPasswordRect = new Rect(20, 10, 100, 30);
Rect mLabelRect = new Rect(20, 50, 100, 30);
string mPasswordFieldValue = "123";
void OnGUI()
{
mPasswordFieldValue = EditorGUI.PasswordField(mPasswordRect, mPasswordFieldValue);
EditorGUI.LabelField(mLabelRect, mPasswordFieldValue);
}
这个和GUI的区别是没有那个char类型的掩码了
5、DropdwonButton 下拉按钮创建一个能够对鼠标按下做出反应的按钮,用于显示您自己的下拉菜单内容……
结果就是一个长得像下拉按钮的按钮,其他东西都要自己实现……
那有个屁用啊!!!!文档也没给使用示例
百度找了一个示例这是链接将就看看,这里面还说了其他的下拉做法
6、Toggle和ToggleLeft 勾选项(开关)Rect mToggleRect = new Rect(20, 10, 40, 30);
Rect mToggleLeftRect = new Rect(20, 40, 100, 30);
bool mToggleValue = false;
void OnGUI()
{
mToggleValue = EditorGUI.Toggle(mToggleRect, "点我", mToggleValue);
mToggleValue = EditorGUI.ToggleLeft(mToggleLeftRect, "点我", mToggleValue);
}
一个是勾选框在左边,一个是勾选框在右边
7、HelpBox 帮助框Rect mRect = new Rect(20, 10, 100, 50);
void OnGUI()
{
EditorGUI.HelpBox(mRect, "获取帮助", MessageType.Info);
}
其实就是一个提示的框框……
8、ColorField 取色器Rect mRect = new Rect(20, 10, 100, 30);
Color mColorValue;
void OnGUI()
{
EditorGUI.ColorField(mRect, mColorValue);
}
就是常用的那个取色器,点某个地方取颜色或者选择颜色的那个……
9、BoundsField 包围盒属性框Rect mRect = new Rect(20, 10, 300, 200);
Bounds mBoundsValue;
void OnGUI()
{
mBoundsValue = EditorGUI.BoundsField(mRect, mBoundsValue);
}
创建用于输入 Bounds 的 Center 和 Extents 字段。
BoundsInt同理,不演示了……
10、CurveField 曲线编辑框用于编辑 AnimationCurve 的曲线框
Rect mRect = new Rect(3, 3, 300, 50);
AnimationCurve mCurve = AnimationCurve.Linear(0, 0, 1, 0);
void OnGUI()
{
mCurve = EditorGUI.CurveField(mRect, "曲线", mCurve);
}
点击绘制出来的组件会弹出Curve窗口用来修改曲线,可以用来调试场景内物体的曲线,详情做法[看文档](EditorGUI-CurveField - Unity 脚本 API)
11、DelayedTextField 延迟文本框Rect mTextRect = new Rect(10, 10, 100, 30);
Rect mLabelRect = new Rect(10, 70, 100, 30);
string mTextValue = "";
void OnGUI()
{
mTextValue = EditorGUI.DelayedTextField(mTextRect, mTextValue);
EditorGUI.LabelField(mLabelRect, mTextValue);
}
这种延迟文本框与普通的文本框的区别在于:这种文本框只有在文本输入完成之后移开或者按回车键(就和Winform里的失去焦点一样)才会把里面的文本返回
另外还有DelayedIntField、DelayedFloatField、DelayedDoubleField等其他特别的数字输入框,这里不一一列出了
12、EnumFlagsField 多选枚举选项enum ExampleFlagsEnum
{
None = 0, // 什么都没选
A = 1 << 0,
B = 1 << 1,
AB = A | B, // A和B一起选择
C = 1 << 2,
All = ~0, // 所有选项
}
ExampleFlagsEnum m_Flags;
void OnGUI()
{
m_Flags = (ExampleFlagsEnum)EditorGUI.EnumFlagsField(new Rect(5, 5, 300, 20), m_Flags);
}
我自己例子举不好……上面的是[文档](EditorGUI-EnumFlagsField - Unity 脚本 API)里的例子
注意:返回的是用户修改的枚举标志值。这是一个选择位掩码,其中每个位代表一个枚举值索引(其实我不是很懂……)
如果使用了普通的枚举值,会出现一个叫Everying的选项,点了之后勾选所有……所以这个Everything就是上面枚举值指的~0;如果指定了第一个值为1的话,会出现一个Nothing,也就是0,这么想的话上面的话应该能理解一点了……
EnumPopup是单选的枚举选择的,不演示了。
13、Foldout 折叠块文档里面的代码写的很不错,有和场景里的物体交互,就直接拿来了,我加了点注释容易理解
public bool showPosition = true; //保存是否显示折叠内容的布尔值
public string status = "Select a GameObject"; //保存当前状态的字符串
void OnGUI()
{
showPosition = EditorGUI.Foldout(new Rect(3, 3, position.width - 6, 15), showPosition, status); //绘制出一个Foldout组件
if (showPosition)
if (Selection.activeTransform) //判断场景中是否有选择的物体
{
Selection.activeTransform.position = EditorGUI.Vector3Field(
new Rect(3, 25, position.width - 6, 40),
"Position",
Selection.activeTransform.position); //绘制出vector3组件,数值与物体绑定
status = Selection.activeTransform.name; //当前状态显示为物体名
}
if (!Selection.activeTransform) //如果没有选中物体
{
status = "Select a GameObject"; //更改状态字符串
showPosition = false; //折叠控件
}
}
吐槽:其实这个折叠控件就是个会变箭头的Toggle吧……长得不一样,返回的还不是一样的是bool值。
14、BeginDisabledGroup一组可禁用的控件bool isDisabled = false;
float jumpHeight = 0f;
Rect mToggleRect = new Rect(20, 20, 50, 30);
Rect mLabelRect = new Rect(20, 60, 50, 30);
void OnGUI()
{
isDisabled = EditorGUI.Toggle(mToggleRect,"点我打开", isDisabled);
EditorGUI.BeginDisabledGroup(isDisabled);
EditorGUI.LabelField(mLabelRect, "你好啊~");
EditorGUI.EndDisabledGroup();
}
用一个bool值isEnabled来控制这一组组件是否可用
注意:传入的参数为disabled,也就是传入为true时是禁用
备注:该组不能用于启用最初以其他方式禁用的控件。 这些组可以嵌套,如果子组本身已禁用或父组已禁用, 则子组中的控件将被禁用。
其他部分 文档地址
UnityEditor.EditorGUI



