Unity编辑器开发---总结

一、Unity自身界面的拓展开发

1.Inspector界面拓展

注:继承自 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-----------

    [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----------------

   [Range(0,100)]
   public float number;

Hearder----------

     [Header("能被抓取")]
    public bool canCatch;

 

2.窗口拓展

注:

MenuItem
ScriptableWizard
EditorWindow

示例详解:

MenuItem-------------

    [MenuItem("Custom/Create Child For Selected GameObjects", true)]
    static bool ValidateMenuAddChild()
    {
        return Selection.activeGameObject != null;
    }

EditorWindow------

OnGUI() 回调

OnDestroy() 当EditorWindow关闭的时候触发。
OnFocus() 当Window获得焦点触发。
OnHierarchyChange() 当Hierarchy面板内有改变的时候触发。
OnInspectorUpdate() 每秒十帧的触发,来判断Inspector界面是否有改变。
OnLostFocus() 当Window失去焦点触发。
Update() 每秒100次的触发,在所有可见的Windows。
 

Property Drawers--------

Custom Editors---------

两种方式重写InspectorGUI

第一种:

第二种:

具体详见:Unity编辑器扩展_iningwei的博客-CSDN博客_unity 编辑器扩展

3.Scene界面拓展

注:

右键菜单
自定义菜单
禁用选择对象
OnSceneGUI
获得SceneView尺寸
TreeView
Gizmos
Handles

示例详解:

右键菜单---------------------------------------------------------------------------------------------------------------------

4.Game视图拓展

1.工具栏、菜单栏拓展开发

2.Inspector界面拓展开发

5.UI常用API

常用编辑器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是鼠标放开才会触发。

猜你喜欢

转载自blog.csdn.net/qq_38074938/article/details/128931582