1. 程式人生 > >unity自定義inspector面板(選擇不同列舉型別,inspector面板出現不同資訊)

unity自定義inspector面板(選擇不同列舉型別,inspector面板出現不同資訊)

廢話不多說,先上效果圖:
這裡寫圖片描述

這裡寫圖片描述

,簡單的來說也就是程式碼列舉幾種型別,我選擇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~
如果有什麼錯誤,歡迎提出來,不喜勿噴!!!