【Editor拡張】条件によってインスペクターから編集不可能にする属性を作った

Unreal EngineにはEditConditionというメタデータ指定子があります。
Unityで例えると属性で渡された条件がtrueのとき
インスペクター編集が不可能になる動作。

誰かがパラメータ用のScriptableObjectを触るときに
不正な値を入れないように対策させるときに使えそう…。
docs.unrealengine.com

なので属性を作成しました。

github.com

使い方

READMEに記載されていますが一応。
属性パラメータに変数名を渡して判別します。

using UnityEngine;
using N3Utility.Attribute;

public class SampleComponent : MonoBehaviour
{
    [SerializeField]
    private bool m_flag = false;

    [SerializeField]
    [DisableBoolField(nameof(m_flag))]
    private string m_text = "Hello world!";
}

内部的にはPropertyDrawerを継承した描画クラス内で
property.serializedObject.FindProperty()を使用して変数を取得して判別しています。

余談

今回、属性を作るにあたってしっかりとお勉強しました。
これはそのメモ。きれいですね。これが完成する前は凄く汚かったけど…

それから初めてUnityパッケージからダウンロードできるように作っています。
今まで使う側だったので作った側に立ててとても嬉しい…!!


複数条件には対応していないので次改良するならそこを対応しよう…。

参考サイト

属性

【C#】【Unity】カスタム属性の基礎知識コンプリートガイド #C# - Qiita
Attribute クラス (System) | Microsoft Learn
Attributes and reflection - C# | Microsoft Learn
GitHub - Unity-Technologies/UnityCsReference: Unity C# reference source code.

UnityPackage

【Unity】Assembly Definition Filesという神機能 - テラシュールブログ
【Unity Package Manager】GitHubの自作ツールをUPM対応する方法メモ #Unity - Qiita
カスタムパッケージの作成 - Unity マニュアル
Unity Assembly Definition 完全に理解した #Unity - Qiita