Unity编辑器扩展
一,菜单项相关操作
1.菜单项(MenuItem)
首先在Asset目录下新建一个Editor文件夹,然后在该目录下添加一个脚本MenuTest.cs
代码内容:
2.组件菜单(AddComponentMenu)
代码内容为:
3.上下文菜单(ContextMenu)
就是在一个物体的组件上添加上下文菜单,即点击右键出现的菜单
就在上文的Test1中添加一个上下文菜单
代码内容如下:
using UnityEngine; using System.Collections; using UnityEditor; [AddComponentMenu("菜单组件/MenuTest")] public class Test1 : MonoBehaviour { [ContextMenu("ContextMenu")] public void Test() { Debug.Log("上下文测试"); } }
4.必要组件菜单(RequireComponent)
必要组件是在添加改组件的同时添加其他的组件,而且是依赖于这个组件的,
同样在上文的Test.cs中添加必要组件,
代码内容为:
二,自定义Inspector界面
1.属性相关标识
1)隐藏属性显示 (HideInInspector) 2)不显示的属性(NonSerialized) 3)关键字序列化(Serializable) 4)序列化域(SerializeField)
首先新建脚本文件,InspectorTest.cs 和脚本Type1.cs
InspectorTest.cs:
Type1.cs脚本内容:(Type1类已经被序列化了)
2.自定义界面属性
这里会用到2个类 Editor 和CustomEditor
Editor是自定义面板的基类
CustomEditor是对应标识的组件脚本
案例1:自定义一个属性面板
1)首先在Scripts文件夹下新建一个脚本文本OwnerUITest.cs
脚本内容为:
using System; using UnityEngine; using System.Collections; public class OwerUITest : MonoBehaviour { public int IntVal; public float FlatVal; public string StrVal; public Type3 mType = new Type3(); } [Serializable] public class Type3 { public int mInt; public int mInt2; }
2)在Editor文件下新建脚本OwnerUIInspector.cs 这个类要继承Editor类,而且要在类的前面声明:[CustomEditor(typeof(OwerUITest))] 关联刚才新建的脚本
脚本的内容为:
1)首先在Scripts文件夹中新建一个脚本组件InspectorZiDingYi.cs,脚本代码如下:
2)然后在Editor文件下新建一个类InspectorZiDingYIEditor 继承Editor,然后与InspectorZiDingYi组件关联,脚本代码如下:
3.自定义窗口
-----------------------------界面的启动和关闭--------------------------
创建自定义窗口需要继承 基类:EditorWindow
案例1:点击菜单项,弹出一个窗口
1)首先在Editor文件夹中创建一个脚本MyTestWindow.cs,脚本内容为:
若修改显示方式:
using UnityEngine; using System.Collections; using UnityEditor; public class MyTestWindow : EditorWindow { [MenuItem("菜单/显示窗口")] public static void showWindow() { MyTestWindow.CreateInstance<MyTestWindow>().ShowUtility(); } }
再换一种其他的显示方式:
using UnityEngine; using System.Collections; using UnityEditor; public class MyTestWindow : EditorWindow { [MenuItem("菜单/显示窗口")] public static void showWindow() { MyTestWindow.CreateInstance<MyTestWindow>().ShowPopup(); } }
这样显示的面板是一个空的面板,无法关闭,我们再这个面板上增加一个关闭按钮:
-----------------------------界面的相关事件机制------------------------
界面的相关事件机制总共有9个: 1.public void OnGUI() ->绘制窗口 2.public void Update() ->刷新方法,100次/秒 3.public void OnInspectorUpdate() ->刷新方法,比Update()少 4.public void OnSelectionChange() ->选择一个对象 5.public void OnDestroy ->销毁窗口 6.public void OnFocus() ->获得焦点 7.public void OnLostFocus() ->失去焦点 8.public void OnHierarchayChange() ->Hierarchay视图窗口文件发生改变 9.public void OnProjectChange() ->Project视图窗口文件发生改变
案例测试:
首先在Editor文件夹系新建脚本文件:MyWindow2,同样首先继承EditorWindow类,然后实现上述的9个事件机制函数,脚本内容如下:
-----------------------------文本颜色字段------------------------
输入框:
EditorGUILayout.TextField(string) 文本输入框 EditorGUILayout.TextArea(string); 可换行的文本输入框
EditorGUILayout.PasswordField(string); 文本输入框
EditorGUILayout.ColorField(Color); 颜色输入框
1)首先在Editor文件夹下新建脚本TextColorwindow.cs,文件内容如下:
-----------------------------标签字段------------------------
标签: EditorGUILayout.LabelField(string) 文本标签 EditorGUILayout.SelectableLabel(string); 选择标签 EditorGUILayout.Space(); 空一行
1)首先在Editor文件中新建脚本LabelWindow.cs 文件内容如下:
-----------------------------数字输入框------------------------
数字输入 EditorGUILayout.IntField(this.mIntVal); 整数输入 EditorGUILayout.FloatField(this.mFloatVal); 浮点数输入
1)首先在Editor文件夹中加入脚本Numberwindow.cs,文件内容为:
-----------------------------滚动条------------------------
EditorGUILayout.Slider(...) 浮点数滚动条
EditorGUILayout.IntSlider(...)整数滚动条
EditorGUILayout.MinMaxSlider(...)
1)首先在Editor文件夹下新建一个脚本ScrollWindow.cs,脚本内容为:
-----------------------------位置大小输入字段------------------------
位置字段: EditorGUILayout.Vector2Field(string, Vector2) 二维坐标 EditorGUILayout.Vector3Field(string,Vector3); 三维坐标 EditorGuILayout.Vector4Field(string,Vector4);四维坐标 EditorGUILayout.RectFiled(Rect); 矩阵 EditorGUILayout.BoundsFiled();距离
1)首先在Editor文件夹下新建脚本PositionWindow.cs ,脚本内容如下:
-----------------------------选择字段------------------------
选择字段: EditorGUILayout.Popup(int, string[]); 字符串选择,返回字符串数组下标 EditorGUILayout.IntPopup(int,int[],string[]) 字符串选择,返回字符串对应下标的整形数组值 EditorGUILayout.EnumPopup(Enum) 枚举选择,返回枚举
1)首先在Editor文件夹下新建文件SelectWindow.cs ,脚本内容为:
-----------------------------标签、层、对象选择字段------------------------
1)首先在Editor文件夹下新建一个脚本TagLayer.cs,脚本的内容为:
-----------------------------单选选择字段-----------------
1)首先在Editor文件夹下新建ToggleWindow.cs脚本文件,脚本内容:
-----------------------------字段分组-----------------
1)首先在Editor文件夹下新建脚本文件GroupWindow,脚本内容为:
-----------------------------其他字段-----------------
1)首先在Editor文件夹下新建OtherWindow.cs脚本文件,脚本内容为: