Odin Attributes 大全之 Type Specifics 系列 | (23)Polymorphic Drawer Settings 特性

📂 Unity常用插件 | 总目录

📂 Unity 3D资源 | 目录索引

Odin Attributes 为Unity开发者提供了更多的自定义选项,使得开发过程更加高效和愉悦。通过使用这些特性,开发者可以创建更加专业和用户友好的编辑器界面,从而提升整个开发团队的工作效率。

在这里插入图片描述

【Odin Inspector and Serializer 最新版 (0积分)免费下载


Polymorphic Drawer Settings 特性为使用 Odin 渲染的多态字段提供选项。

在这里插入图片描述

[ShowInInspector]
public IDemo<int> Default;

[Title("Show Base Type"), ShowInInspector, LabelText("On")]
[PolymorphicDrawerSettings(ShowBaseType = true)]
public IDemo<int> ShowBaseType_On;

[ShowInInspector, LabelText("Off")]
[PolymorphicDrawerSettings(ShowBaseType = false)]
public IDemo<int> ShowBaseType_Off;

[Title("Read Only If Not Null Reference"), ShowInInspector, LabelText("On")]
[PolymorphicDrawerSettings(ReadOnlyIfNotNullReference = true)]
public IDemo<int> ReadOnlyIfNotNullReference_On;

[ShowInInspector, LabelText("Off")]
[PolymorphicDrawerSettings(ReadOnlyIfNotNullReference = false)]
public IDemo<int> ReadOnlyIfNotNullReference_Off;

[Title("Non Default Constructor Preference"), ShowInInspector, LabelText("Exclude")]
[PolymorphicDrawerSettings(NonDefaultConstructorPreference = NonDefaultConstructorPreference.Exclude)]
public IVector2<int> NonDefaultConstructorPreference_Ignore;

[ShowInInspector, LabelText("Construct Ideal")]
[PolymorphicDrawerSettings(NonDefaultConstructorPreference = NonDefaultConstructorPreference.ConstructIdeal)]
public IVector2<int> NonDefaultConstructorPreference_ConstructIdeal;

[ShowInInspector, LabelText("Prefer Uninitialized")]
[PolymorphicDrawerSettings(NonDefaultConstructorPreference = NonDefaultConstructorPreference.PreferUninitialized)]
public IVector2<int> NonDefaultConstructorPreference_PreferUninit;

[ShowInInspector, LabelText("Log Warning")]
[PolymorphicDrawerSettings(NonDefaultConstructorPreference = NonDefaultConstructorPreference.LogWarning)]
public IVector2<int> NonDefaultConstructorPreference_LogWarning;

[Title("Create Custom Instance"), ShowInInspector]
[PolymorphicDrawerSettings(CreateInstanceFunction = nameof(CreateInstance))]
public IVector2<int> CreateCustomInstance;

private IVector2<int> CreateInstance(Type type)
{
    Debug.Log("Constructor called for " + type + '.');

    if (typeof(SomeNonDefaultCtorClass) == type)
    {
        return new SomeNonDefaultCtorClass(485);
    }

    return type.InstantiateDefault(false) as IVector2<int>;
}

public interface IVector2<T>
{
    T X { get; set; }
    T Y { get; set; }
}

[Serializable]
public class SomeNonDefaultCtorClass : IVector2<int>
{
    [OdinSerialize]
    public int X { get; set; }

    [OdinSerialize]
    public int Y { get; set; }

    public SomeNonDefaultCtorClass(int x)
    {
        this.X = x;
        this.Y = (x + 1) * 4;
    }
}

public interface IDemo<T>
{
    T Value { get; set; }
}

[Serializable]
public class DemoSOInt32 : SerializedScriptableObject, IDemo<int>
{
    [OdinSerialize]
    public int Value { get; set; }
}

[Serializable]
public class DemoSOInt32Target : SerializedScriptableObject, IDemo<int>
{
    [OdinSerialize]
    public int Value { get; set; }

    public int target;
}

[Serializable]
public class DemoSOFloat32 : SerializedScriptableObject, IDemo<float>
{
    [OdinSerialize]
    public float Value { get; set; }
}

[Serializable]
public class Demo<T> : IDemo<T>
{
    [OdinSerialize]
    public T Value { get; set; }
}

[Serializable]
public class DemoInt32Interface : IDemo<int>
{
    [OdinSerialize]
    public int Value { get; set; }
}

public class DemoInt32 : Demo<int> { }

public struct DemoStructInt32 : IDemo<int>
{
    [OdinSerialize]
    public int Value { get; set; }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity打怪升级

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值