首先定义一个正常的枚举类型,
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
{
}
效果: