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

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

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

    [SerializeField] private QM _qm;

这个时候我们可以在Unity的Inspector面板看到此时的变量,为单选状态。Unity 扩展编辑器 多选枚举(一)_第1张图片

 下一步就需要增加一些属性让枚举实现可多选,其中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
    {

    }

效果:

Unity 扩展编辑器 多选枚举(一)_第2张图片

你可能感兴趣的:(扩展编辑器,c#,编辑器,unity)