比如經常在三方插件中看到如下在Inspector中的樣式
這種對特別是要做編輯序列化數據腳本操作很友好,但是這個是如何實現呢?比如我們要創建一個保存序列化的npc基本數據,名字(Name),性別(Sex),年齡(Age),需求有了,下面就簡單演示如何創建這類腳本。
1,創建元數據類腳本,在unity中添加如下腳本
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 public class NpcData : MonoBehaviour 6 { 7 8 [SerializeField] public string Name; 9 [SerializeField] public bool IsMale; 10 [SerializeField] public int Age; 11 }
給物體掛上這個腳本看看
雖然這樣能用,但是不太美觀,特別是有新的需求,比如勾選IsMale后,我想把Age這個選項隱藏調,該怎么做呢
在unity中建立一個Editor文件夾,並添加如下腳本:
1 using UnityEditor; 2 3 [CustomEditor(typeof(NpcData))] //指定要編輯的腳本對象 4 public class NpcInspector : Editor 5 { 6 7 NpcData m_Target; 8 9 //重寫OnInspectorGUI方法,當激活此面板區域時調用 10 public override void OnInspectorGUI() 11 { 12 //加入此句,不影響原在Inspector繪制的元素 13 //base.OnInspectorGUI(); 14 15 //獲取指定腳本對象 16 m_Target = target as NpcData; 17 18 m_Target.Name = EditorGUILayout.TextField("Name", m_Target.Name); 19 m_Target.IsMale = EditorGUILayout.Toggle("IsMale", m_Target.IsMale); 20 if (!m_Target.IsMale) 21 { 22 //非勾選IsMale,繪制Age選項 23 m_Target.Age = EditorGUILayout.IntField("Age", m_Target.Age); 24 } 25 } 26 }
這個腳本除了需要放在Editor目錄下,只要在[CustomEditor(typeof(PrefabsTools))]中指定好對象腳本,不需要做其他操作,下面來看看腳本NpcData在Inspector中的樣子