【Editor拡張】条件によってインスペクターから編集不可能にする属性を作った
Unreal EngineにはEditCondition
というメタデータ指定子があります。
Unityで例えると属性で渡された条件がtrue
のとき
インスペクター編集が不可能になる動作。
誰かがパラメータ用のScriptableObjectを触るときに
不正な値を入れないように対策させるときに使えそう…。
docs.unrealengine.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