Unity 扩展编辑器 多选枚举(一)

本文介绍如何在Unity中使用自定义属性创建可多选的枚举类型,避免默认值导致的问题,并通过设置特定值确保正确多选行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先定义一个正常的枚举类型,

    public enum QM
    {
        QM_1,
        QM_2,
        QM_3,
        QM_4,
    }

    [SerializeField] private QM _qm;

这个时候我们可以在Unity的Inspector面板看到此时的变量,为单选状态。

 下一步就需要增加一些属性让枚举实现可多选,其中PropertyAttribute不能直接使用,需要声明一个EnumFlags继承该类,然后在枚举类型的变量前加上该属性

    [System.Flags]
    public enum QM
    {
        QM_1,
        QM_2,
        QM_3,
        QM_4,
    }

    [EnumFlags] [SerializeField] private QM _qm;

    public class EnumFlags : PropertyAttribute
    {

    }

但是这么写会有一个问题,那就是枚举会默认从0开始对其赋值,这个时候的 QM_1等于Nothing,QM_4将会等于QM_2+QM_3,同理其他字段也是会出现问题,这个时候多选枚举就会在你勾选某QM_4的时候直接变成Everything

这个时候需要对值做一定约束,防止发生这种情况,例如:

    [System.Flags]
    public enum QM
    {
        QM_1 = 1,
        QM_2 = 2,
        QM_3 = 4,
        QM_4 = 8,
    }

    [EnumFlags] [SerializeField] private QM _qm;

    public class EnumFlags : PropertyAttribute
    {

    }

效果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值