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~
如果有什么错误,欢迎提出来,不喜勿喷!!!

  • 17
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值