编辑器开发流程 注: 下面使用的是Editor文件夹下的脚本,对外面挂载脚本进行关联。
1. 先引用命名空间UnityEditor
2.需要继承Editor类
3.使用[CustomEditor]特性,与需要扩展开发进行关联
4.利用OnEnable和OnDisable做一些初始化和清理工作
5.需要重写OnInspectorGUI, 该方法是对Inspactor面板进行绘制
即 public override void OnInspectorGUI
6.使用target变量,或取选中的物体身上的脚本获取该脚本的对象
备注: 没有Update声明周期函数 .
API : 具体,,我就不那么细了 查手册把
EditorGUILayout.TextField("label", ) 文本框
EditorGUILayout.TextArea("label", ) 带滑动区的文本框,默认显式3行,超过就显示滚动条
EditorGUILayout.IntField("label", ) : 。。。。有int float double
EditorGUILayout.Toggle("label", ) :关联 bool 类型
EditorGUILayout.Vector3Field("label", ) :关联vector3类型
EditorGUILayout. ColorField(“ label”, ) :关联颜色的
枚举 -- (枚举类型)EditorGUILayout . EnumPopup("" , 枚举变量名) 枚举单选
(枚举类型)EditorGUILayout . EnumFlagsField("" , 枚举变量名) 枚举多选
注意点 :枚举在定义的时候 后面对应的int值 需要时2的幂次方,才能保证int 的2进制的每一位表示一个枚举值
滑动条 -- EditorGUILayout . Slider(new GUIContent(“ ”),输出的变量名, 1 , 100) : 滑动范围1到100
帮助框 -- EditorGUILayout . HelpBox(" ", MessageType . Error) : 参数 显示信息 信息的类型
Messagetype类型 None / Info/ Warning / Error
水平布局 两个语句 EditorGUILayout . BeginHorizontal() 、 EditorGUILayout . EndHorizontal()
开始布局 , 结束布局
关键点 : 一、没有找到想要找的类型
(T)EditorGUILayout . ObjectField(" label", 关联对象,typeof(T),true)
1、所有继承了Object的类都可以使用该方法关联
2、T 需要关联的对象的类型
3、 是否可以选择Scene里的物体 true(代表可以选择)
返回值 的对象要类型转化
二、 (1)通过名字去寻找关联的对象,参数就是字段的名字
SerializedProperty sp = SerializedObject . FindProperty(“list”); 通过名字 获取序列化对象
(2)绘制查找的可序列化对象
EditorGUILayout . PropertyField(sp , new GUIContent("list11"),true);
第一个参数: 通过名字找到的序列化对象
第二个参数 : 需要有一个GUIContent的对象,new出来一个
第三个参数:t整个可以关联可序列化的属性可否显示出来, true的话代表可以
(3)关键 :serializedObject. ApplyModifiedProperties()
所有通过serialized. FindProperty查找到的对象,修改后,都需要调用下面的这个方法
证明吧修改过之后的值应用上,该方法只需要调用一次就够了
注意: 该方法是用来保护序列化对象的,如果没有这个方法,那么对象修改无效