unity 选择不同的枚举在面板上显示不同的属性
一、创建一个普通类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyJointManager : MonoBehaviour {
private enum Hand
{
LeftHand,
RightHand
}
private enum LeftJoint
{
LeftWrist,
LeftElbow,
LeftShoulder
}
private enum RightJoint
{
RightWrist,
RightElbow,
RightShoulder
}
[HideInInspector] //要在面板中隐藏,否则的话会重复显示在面板上
[SerializeField, Tooltip("手")]
private Hand hand = Hand.LeftHand;
[HideInInspector]
[SerializeField, Tooltip("左手关节")]
private LeftJoint leftJoint = LeftJoint.LeftElbow;
[HideInInspector]
[SerializeField, Tooltip("右手关节")]
private RightJoint rightJoint = RightJoint.RightElbow;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}
二、创建一个editor文件夹,在里边创建一个类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(MyJointManager))] //关联之前的脚本
public class MyJointEditor : Editor {
private SerializedObject obj; //序列化
private SerializedProperty hand, leftJoint, rightJoint; //定义变量
void OnEnable()
{
obj = new SerializedObject(target);
hand = obj.FindProperty("hand");
leftJoint = obj.FindProperty("leftJoint");
rightJoint = obj.FindProperty("rightJoint");
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
obj.Update();
EditorGUILayout.PropertyField(hand);
if (hand.enumValueIndex == 0)
{
EditorGUILayout.PropertyField(leftJoint);
}
else if (hand.enumValueIndex == 1)
{
EditorGUILayout.PropertyField(rightJoint);
}
obj.ApplyModifiedProperties();
}
}
三、面板上的效果