开发中,如果使用插件会发现插件的组件,在属性面板上的设计非常方便,看着很高大上,他们是怎么做到的呢
基础
在Editor文件夹下,创建我们的属性面板编辑脚本using UnityEditor的命名空间继承Editor测试脚本
using UnityEngine;public class ComponentInspector:MonoBehaviour {public bool PropertyBool;public TestEnum PropertyEnum;public int PropertyValue;}public enum TestEnum {Test1 = 0,Test2 = 1}
Editor脚本
using UnityEngine;using UnityEditor;//ComponentInspector:目标脚本[CustomEditor(typeof(ComponentInspector))]public class ComponentInspectorEditor : Editor{private SerializedObject @object;private SerializedProperty m_PropertyBool;private SerializedProperty m_PropertyEnum;private SerializedProperty m_PropertyValue;private void OnEnable(){@object = new SerializedObject(target);//寻找对应的属性m_PropertyBool = @object.FindProperty("PropertyBool");m_PropertyEnum= @object.FindProperty("PropertyEnum");m_PropertyValue= @object.FindProperty("PropertyValue");}public override void OnInspectorGUI(){@object.Update();SerializedProperty property = @object.GetIterator();while (property.NextVisible(true)){using (new EditorGUI.DisabledScope("m_Script" == property.propertyPath)){EditorGUILayout.PropertyField(property, true);break;}}//开始设计属性面板EditorGUILayout.PropertyField(m_PropertyBool);if(m_PropertyBool .boolValue){EditorGUILayout.PropertyField(m_PropertyEnum);if(m_PropertyEnum.enumValueIndex == 0){EditorGUILayout.PropertyField(m_PropertyValue);}}@object.ApplyModifiedProperties();}}