unity实现枚举多选,在inspector面板里面,并有如何使用的方法

在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里直接有代码的示例

猜你喜欢

转载自blog.csdn.net/LWKlwk11/article/details/127007994