コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】【Odin Inspector 2.0 新機能】特定のクラスのパラメータに属性を付与できる「Attribute Processors」

アセット

概要

using System;

[Serializable]
public class Data
{
    public int m_id;
    public string m_name;
}
using UnityEngine;

public class Example : MonoBehaviour
{
    public Data m_data;
}
using Sirenix.OdinInspector;
using Sirenix.OdinInspector.Editor;
using System;
using System.Collections.Generic;
using System.Reflection;

public class DataEditor : OdinAttributeProcessor<Data>
{
    public override void ProcessSelfAttributes
    ( 
        InspectorProperty property, 
        List<Attribute> attributes 
    )
    {
        attributes.Add( new TitleAttribute( "情報" ) );
    }

    public override void ProcessChildMemberAttributes
    ( 
        InspectorProperty parentProperty, 
        MemberInfo member, 
        List<Attribute> attributes 
    )
    {
        if ( member.Name == "m_id" )
        {
            attributes.Add( new LabelTextAttribute( "番号" ) );
        }
        else if ( member.Name == "m_name" )
        {
            attributes.Add( new HideLabelAttribute() );
            attributes.Add( new MultiLinePropertyAttribute( 3 ) );
        }
    }
}

f:id:baba_s:20180814163316p:plain

「Attribute Processors」を使用することで
特定のクラスのパラメータに属性を付与できます

クラス定義で属性を記述する必要がなくなるので、
クラス定義のコードをキレイに保つことができます

また、サードパーティ製のコードに外部から属性を適用することもできます

参考サイト様