Inspector界面编辑器开发

编辑器开发流程   注: 下面使用的是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查找到的对象,修改后,都需要调用下面的这个方法

                                                证明吧修改过之后的值应用上,该方法只需要调用一次就够了 

                                              注意: 该方法是用来保护序列化对象的,如果没有这个方法,那么对象修改无效

猜你喜欢

转载自blog.csdn.net/j_sbytc3/article/details/81459570