在Editor文件夹里创建脚本,名字为EnumMultiAttributeDrawer
using UnityEditor;
using UnityEngine;
/// <summary>
/// 绘制多选属性
/// </summary>
[CustomPropertyDrawer(typeof(EnumMultiAttribute))]
public class EnumMultiAttributeDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
property.intValue = EditorGUI.MaskField(position, label, property.intValue, property.enumNames);
}
}
创建脚本Test(不在Editor文件夹里),代码如下
using System;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 测试枚举
/// </summary>
public enum EnumType
{
One,
Two,
Three,
Four
}/// <summary>
/// 定义多选属性
/// </summary>
public class EnumMultiAttribute : PropertyAttribute
{
}
public class Test : MonoBehaviour
{
[Header("测试枚举")]
[EnumMultiAttribute]
public EnumType enumType;
private List<EnumType> enumTypes = new List<EnumType>();
// 判断是否选中该枚举值
public bool IsSelectEnumType(EnumType type)
{
int index = 1 << (int)type;
int eventTypeResult = (int)enumType;
if ((eventTypeResult & index) == index)
{
return true;
}
return false;
}
public void Awake()
{
//循环获取到选择的枚举
foreach (EnumType item in Enum.GetValues(typeof(EnumType)))
{
if (IsSelectEnumType(item))
{
enumTypes.Add(item);
Debug.Log("enum选择的有:" + enumTypes[enumTypes.Count - 1].ToString());
}
}
if (enumTypes.Count <= 0)
{
Debug.Log("enum选择的为Nothing");
}
}
public List<EnumType> GetEnumTypes()
{
return enumTypes;
}
}
GetEnumTypes方法为获取到枚举的List集合
或者在Awake里直接有代码的示例