Unity3D开发之构建自己的多选标签

下面代码主要实现的是类似camera中的Culling Mask。可多选标签。

首先创建一个我们自己的特性类,继承自PropertyAttribute:

public class MyAttribute : PropertyAttribute
{
    
}

然后创建一个我们自己的属性绘制器,继承自PropertyDrawer,代码如下:

[CustomPropertyDrawer(typeof(MyAttribute))]
public class MyPropertyDrawer : PropertyDrawer
{
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        property.intValue = EditorGUI.MaskField(position, label, property.intValue, property.enumNames);
    }
}

注意:MyPropertyDrawer 继承自GUIDrawer,属于编辑器的功能,所有我们要把此脚本放到Editor文件夹下。

我们声明一个我们需要的枚举类型来代表标签:

public enum ExclusionType
{
    InfoPanel,
    OtherPanel,
    Other,
    LeftMenuPanel,
}

我们在类中给我们声明的枚举类型打上标签,这样就可以实现我们的多选了。注意0代表所有选中,-1代表全部未选中


[MyAttribute][Header("面板类型,如果没有互斥 选择nothing 有互斥选择自己属于的面板类型 相同类型的面板互斥 面板可设置多类型")]
public ExclusionType ExclusionType;

以上就是多选标签的实现方法。

 

应用:本文实现这个主要是想要做面板互斥功能,而互斥的选择在面板动态设定。比如同为other标签的面板互斥。

互斥的代码如下:

public bool IsExclusion(int type)
    {
        return !((int)ExclusionType & type).Equals(0);
    }

ExclusionType为自身面板的类型,type为其他面板类型。

我们设置自身面板为infopanel和OtherPanel时,对应的ExclusionType为0000 0011,与传进来的面板类型数据进行与计算,如果有相同位,则一定不为0,如果为0,则代表不为同一种类型面板。即不互斥。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值