Unity3D编辑器实现枚举多选
简介:
在编辑器中,可以很简单的实现枚举的多选。
方法一
在脚本中自定义枚举属性
using System;
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;
}
在Editor文件夹创建属性脚本
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);
}
}
如果需要判断是否选中了某个枚举,需要位移操作
// 判断是否选中该枚举值
public bool IsSelectEnumType(EnumType type)
{
int index = 1 << (int)type;
int eventTypeResult = (int)enumType;
if ((eventTypeResult & index) == index)
{
return true;
}
return false;
}
方法二
using System;
using UnityEngine;
[Flags] // Flags关键字允许我们在使用.net 枚举变量时,使用多个组合值
public enum Week
{
None = 0, // 在组合值中,0代表不存在
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
Saturday = 32,
Sunday = 64
}
public class Test : MonoBehaviour
{
public Week weekDay; //编辑器面板可多选
/// <summary>
/// 添加枚举元素
/// </summary>
/// <param name="w"> 原始变量 </param>
/// <param name="_wArray"> 要增加的类型</param>
public static void Add(ref Week w, Week[] _wArray)
{
foreach (Week _w in _wArray)
{
w = w | _w;
}
}
/// <summary>
/// 移除枚举元素
/// </summary>
/// <param name="w"> 原始变量 </param>
/// <param name="_wArray"> 要增加的类型</param>
public static void Remove(ref Week w, Week[] _wArray)
{
foreach (Week _w in _wArray)
{
w = w & ~_w;
}
}
/// <summary>
/// 是否包含
/// </summary>
/// <param name="w"> 原始变量 </param>
/// <param name="_w"> 要增加的类型</param>
public static bool IsContain(Week w, Week _w)
{
return 0 != (w & _w);
}
/// <summary>
/// 是否为None
/// </summary>
public static bool IsNone(Week w)
{
return w != Week.None;
}
}

浙公网安备 33010602011771号