unity自定義inspector面板(選擇不同列舉型別,inspector面板出現不同資訊)
阿新 • • 發佈:2019-02-09
廢話不多說,先上效果圖:
,簡單的來說也就是程式碼列舉幾種型別,我選擇A,就出現A的相關資料,選擇B就出現B的相關資料,如果不做這種效果,inspector面板就會有很多東西,太亂。好了,下面開始教如何製作這個種效果的:
先新建一個C#指令碼,指令碼名稱隨便你,我這裡用test1.cs,相關內容如下:
using UnityEngine;
using System.Collections;
public class test1 : MonoBehaviour {
public enum type1 {
a,
b
}
public type1 m_type;
public int a_int;
public int b_int;
}
這個指令碼非常簡單,就是列舉型別,public出2個公有變數,如果只是這樣,我們inspector面板是這樣的:
這肯定不能達到我們的要求,接下來在Project面板裡新建一個資料夾,命名為Editor,在這個資料夾下新建一個指令碼,名字隨便,我這裡用NewBehaviourScript1.cs,指令碼內容如下:
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(test1))]//關聯之前的指令碼
public class NewBehaviourScript1 : Editor {
private SerializedObject test;//序列化
private SerializedProperty m_type,a_int, b_int;//定義型別,變數a,變數b
void OnEnable()
{
test = new SerializedObject(target);
m_type = test.FindProperty("m_type");//獲取m_type
a_int = test.FindProperty("a_int" );//獲取a_int
b_int = test.FindProperty("b_int");//獲取b_int
}
public override void OnInspectorGUI()
{
test.Update();//更新test
EditorGUILayout.PropertyField(m_type);
if (m_type.enumValueIndex == 0) {//當選擇第一個列舉型別
EditorGUILayout.PropertyField(a_int);
}
else if (m_type.enumValueIndex == 1) {
EditorGUILayout.PropertyField(b_int);
}
//serializedObject.ApplyModifiedProperties();
test.ApplyModifiedProperties();//應用
}
}
指令碼相對簡單,就不解釋了,這個指令碼不需要掛載在物體上,現在點選剛剛的列舉型別,是不是可以出現想要的效果了!!!!O(∩_∩)O~
如果有什麼錯誤,歡迎提出來,不喜勿噴!!!