注:
右键菜单 | |
自定义菜单 | |
禁用选择对象 | |
OnSceneGUI | |
获得SceneView尺寸 | |
TreeView | |
Gizmos | |
Handles |
示例详解:
右键菜单---------------------------------------------------------------------------------------------------------------------
注:继承自 MonoBehaviour 的类的一些扩展,用来修改脚本变量在Inspector面板显示效果。
[HideInInspector] | 变量在Inspector面板隐藏 |
[SerializeField] | 变量被序列化,私有变量也会被显示 |
[NonSerialized] | 变量不可被序列化,且在Inspector面板不显示 |
[ContextMenu("")] | |
[ContextMenuItem()] | |
[Range(min,max)] | |
[Header("")] |
示例详解:
ContextMenu
[ContextMenu("DoLogTest")]
void DoLogTest()
{
Debug.Log("i am function DoLogTest");
}
[ContextMenuItem("Random Age", "RandomAge")]
public int Age;
void RandomAge()
{
Age = new System.Random(DateTime.Now.Millisecond).Next(1, 100);
}
[ContextMenuItem("Random Name", "RandomName")]
public string Name;
private void RandomName()
{
string[] names = new string[] { "Jack", "Jim", "Tomas", "Han", "Ann" };
Name = names[new System.Random(DateTime.Now.Millisecond).Next(0, 4)];
}
[Range(0,100)]
public float number;
[Header("能被抓取")]
public bool canCatch;
注:
MenuItem | |
ScriptableWizard | |
EditorWindow |
示例详解:
[MenuItem("Custom/Create Child For Selected GameObjects", true)]
static bool ValidateMenuAddChild()
{
return Selection.activeGameObject != null;
}
OnGUI() 回调
OnDestroy() 当EditorWindow关闭的时候触发。
OnFocus() 当Window获得焦点触发。
OnHierarchyChange() 当Hierarchy面板内有改变的时候触发。
OnInspectorUpdate() 每秒十帧的触发,来判断Inspector界面是否有改变。
OnLostFocus() 当Window失去焦点触发。
Update() 每秒100次的触发,在所有可见的Windows。
两种方式重写InspectorGUI
第一种:
第二种:
具体详见:Unity编辑器扩展_iningwei的博客-CSDN博客_unity 编辑器扩展
常用编辑器UI绘制API
空行
EditorGUILayout.Separator() 一个比较大的空行
EditorGUILayout.Space() 一个比较小的空行
GUILayout.Space(10f) 可控具体空多少行
GUILayout.FlexibleSpace() 底层自动计算空白区
布局
水平,垂直布局
GUILayout.BeginHorizontal()和GUILayout.EndHorizontal() 二者一起可以让内部GUI水平排列。同理还有Vertical。
折叠区域
折叠组 EditorGUILayout.BeginFoldoutHeaderGroup()和EditorGUILayout.EndFoldoutHeaderGroup()
折叠 EditorGUILayout.Foldout()
开关控件
单个开关 EditorGUILayout.Toggle,EditorGUILayout.ToggleLeft
开关组 EditorGUILayout.BeginToggleGroup,EditorGUILayout.EndToggleGroup
滚动区域
EditorGUILayout.BeginScrollView()和EditorGUILayout.EndScrollView()
类型字段
EditorGUILayout.LabelField() 标签字段
EditorGUILayout.IntField() 整数字段
EditorGUILayout.FloatField() 浮点数字段
EditorGUILayout.TextField() 文本字段
EditorGUILayout.Vector2Field() 二维向量字段
EditorGUILayout.Vector3Field() 三维向量字段
EditorGUILayout.Vector4Field() 四维向量字段
EditorGUILayout.ColorField() 颜色字段
EditorGUILayout.CurveField() 曲线字段(AnimationCurve)
滑动条、进度条
EditorGUILayout.Slider(),EditorGUILayout.IntSlider()
EditorGUILayout.MinMaxSlider() 双滑块滑动条
EditorGUI.ProgressBar()
提示框
EditorGUILayout.HelpBox()
枚举选择
EditorGUILayout.EnumPopup 单选枚举
EditorGUILayout.EnumFlagsField 多选枚举
EditorGUILayout.IntPopup和EditorGUILayout.MaskField
EditorGUILayout.IntPopup 单选整型
EditorGUILayout.MaskField 多选整形
一些注意项
EditorGUILayout.DropdownButton 并不是下拉按钮,而是鼠标按下就会触发的按钮。而Button是鼠标放开才会触发。