您的位置:首页 > 移动开发 > Unity3D

Unity 属性面板Inspector定制

2017-01-10 11:09 1226 查看




[b]1、显示枚举对应的参数
[/b]

脚本1:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public enum EnumTest
{
None,
EnumValue1,
EnumValue2,
EnumValue3
}

public class TestInspector : MonoBehaviour {

[SerializeField] private EnumTest _enumTemp = EnumTest.None;

[SerializeField] private int _temp1 = 1;
[SerializeField] private int _temp2 = 2;
[SerializeField] private int _temp3 = 3;
}


脚本2:(放在Editor文件夹下)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

//Tip: typeof(脚本名)
[CustomEditor(typeof(TestInspector)),CanEditMultipleObjects]
public class EditorInspector : Editor {

private SerializedProperty enumTemp;
private SerializedProperty temp1;
private SerializedProperty temp2;
private SerializedProperty temp3;

void OnEnable () {
//Tip: serializedObject.FindProperty ("变量名");
enumTemp = serializedObject.FindProperty ("_enumTemp");

temp1 = serializedObject.FindProperty ("_temp1");
temp2 = serializedObject.FindProperty ("_temp2");
temp3 = serializedObject.FindProperty ("_temp3");
}

public override void OnInspectorGUI () {
//Tip: 用来实时更新
serializedObject.Update ();

EditorGUILayout.PropertyField (enumTemp);

switch (enumTemp.enumValueIndex) {
case (int)EnumTest.None:
//Debug.Log("None");
break;
case (int)EnumTest.EnumValue1:
EditorGUILayout.PropertyField (temp1);
break;
case (int)EnumTest.EnumValue2:
EditorGUILayout.PropertyField (temp1);
EditorGUILayout.PropertyField (temp2);
break;
case (int)EnumTest.EnumValue3:
EditorGUILayout.PropertyField (temp1);
EditorGUILayout.PropertyField (temp2);
EditorGUILayout.PropertyField (temp3);
break;
}

//Tip: 应用修改属性
serializedObject.ApplyModifiedProperties ();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: