首页 > 代码库 > 自定义Inspector检视面板
自定义Inspector检视面板
Unity中的Inspector面板可以显示的属性包括以下两类:
(1)C#以及Unity提供的基础类型;
(2)自定义类型,并使用[System.Serializable]关键字序列化,比如:
[System.Serializable]public class TestClass{ public Vector3 vec = Vector3.zero; public Color clr = Color.green;}
也可以使用[System.NonSerialized]标记不需要显示的属性,比如:
public class TestClass{ [System.NonSerialized] public Vector3 vec = Vector3.zero;}
有的时候对于U3D默认的Inspector不能满足需求,则可以对特定类型的Inspector面板进行自定义:编写一个对应的Editor类,然后重写其OnInspector方法,比如我们有如下类型:
using UnityEngine;using System.Collections;[System.Serializable]public class TestClass{ public Vector3 vec = Vector3.zero; [System.NonSerialized] public Color clr = Color.green;}[ExecuteInEditMode()][RequireComponent(typeof(TestComponent))]public class TestInspector : MonoBehaviour { public Vector3 lookAtPoint = Vector3.zero; public Vector3 pos = Vector3.zero; public TestClass testObj = new TestClass(); void Update() { transform.LookAt(lookAtPoint); transform.position = pos; }}
然后在Editor目录下添加如下脚本:
using UnityEngine;using UnityEditor;using System.Collections;[CustomEditor(typeof(TestInspector))]public class TestInspectorEditor : Editor{ private SerializedObject obj; private SerializedProperty lookAtPoint; private SerializedProperty pos; private SerializedProperty testObj; // 添加TestInspector组件的GameObject被选中时触发该函数 void OnEnable() { obj = new SerializedObject(target); lookAtPoint = obj.FindProperty("lookAtPoint"); pos = obj.FindProperty("pos"); testObj = obj.FindProperty("testObj"); } // 重写Inspector检视面板 public override void OnInspectorGUI() { obj.Update(); EditorGUILayout.PropertyField(lookAtPoint); EditorGUILayout.PropertyField(pos); EditorGUILayout.PropertyField(testObj, true); // 第二个参数表示有子节点需要显示 obj.ApplyModifiedProperties(); }}
在OnInspector函数中就可以实现你想要的效果。
上面的代码中有几点需要注意:
(1)[ExecuteInEditMode()]这个函数可以使代码在编辑模式下运行,不需要运行游戏;
(2)TestInspectorEditor类必须继承自Editor,CustomEditor告诉U3D哪个组建类型需要自定义,OnInspectorGUI在显示组件的Inspector面板时调用;
(3)SerializedObject序列化物体、SerializedProperty序列化属性和Editor这三者一起使用,用来访问和更新组件的属性,SeriailzedProperty能够以通用的方式访问所有的基础类型,包括数组的控制等。
另外,可以在OnInspectorGUI中调用DrawDefaultInspector函数用来显示默认的监事面板内容。
这篇帖子写得很不错:http://blog.csdn.net/lilanfei/article/details/7680802
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。