也可以使用[System.NonSerialized]标记不需要显示的属性,比如:
有的时候对于U3D默认的Inspector不能满足需求,则可以对特定类型的Inspector面板进行自定义:编写一个对应的Editor类,然后重写其OnInspector方法,比如我们有如下类型:
然后在Editor目录下添加如下脚本:
在OnInspector函数中就可以实现你想要的效果。
上面的代码中有几点需要注意:
(1)[ExecuteInEditMode()]这个函数可以使代码在编辑模式下运行,不需要运行游戏;
(2)TestInspectorEditor类必须继承自Editor,CustomEditor告诉U3D哪个组建类型需要自定义,OnInspectorGUI在显示组件的Inspector面板时调用;
(3)SerializedObject序列化物体、SerializedProperty序列化属性和Editor这三者一起使用,用来访问和更新组件的属性,SeriailzedProperty能够以通用的方式访问所有的基础类型,包括对数组的控制等;
(4)可以在OnInspectorGUI中调用DrawDefaultInspector函数用来显示默认的监事面板内容;
(5)EditorGUILayout.PropertyField(testObj, true);如果该类型有子节点,第二个参数需要设置为true才能正确的展开;
(6)[HideInInspector]也可用于隐藏属性显示。
******************************************************************************************
除了自定义Inspector检视面板,我们还可以类似的方法自定义场景视图中对物体的控制,方法是重定义Editor的OnSceneGUI()函数,比如:
主要是使用Handles编辑器类来进行自定义,该类型提供了很多方便的操作接口,比如DrawLine、DrawCube、DrawBezier等。
注意,不能在OnSceneGUI中使用SerializedObject。