NaughtyAttributesについて
Unityのインスペクタを拡張するライブラリです。
[Button]
や[Label]
などC#アトリビュートが追加され簡単にインスペクタツールを作ることができるようになります。
MIT ライセンス
Githubでのスター数は4.3k
※ 有名ライブラリのスター数
(UniTask: 7.5k, UniRx: 7k, DOTween: 2.3k, InputSystem: 1.4k, ShaderGraph: 1.2k)
類似のライブラリとしてはOdinが有名かと思いますが、$60.50の有償シートラインセンスのため導入ハードルが高めです。
その点NaughtyAttributesはOdinほど機能は多くありませんがオープンソースなので気軽に利用できます。
主要な機能
Button
インスペクタにボタンが表示され、押すとメソッドが実行されます
テスタビリティが向上します
[Button]
private void SomeMethod() { }
[Button("カスタム")]
private void SomeMethod2() { }
Label
フィールドに別名を付ける機能です
非エンジニアに分かりやすくするのに便利です
[SerializeField, Label("カスタムラベル")]
private string _foo;
ShowIf / HideIf
条件によってフィールドの表示/非表示を行います
コンポーネントが複数の機能を持つ時、特定の機能が有効なときにだけ関連フィールドを表示するのに便利です
[SerializeField]
private bool _isOn;
[SerializeField, ShowIf(nameof(_isOn))]
private int _foo;
EnableIf / DisableIf
条件によってフィールドの有効化/無効化を行います
特定のフィールドが有効なときにだけ関連フィールドを有効化するのに便利です
[SerializeField]
private bool _isOn;
[SerializeField, EnableIf(nameof(_isOn))]
private int _foo;
Foldout
複数のフィールドの折りたたみを行います
[SerializeField, Foldout("Private")]
private int _foo;
[SerializeField, Foldout("Private")]
private int _bar;
ReadOnly
読み取り専用になります
[ReadOnly]
public Vector3 Foo;
OnValueChanged
インスペクタで値が変わったときにコールバックを受け取ることができます
値が変わったときに何か処理するには[OnValidate]
や[ExecuteAlways]
を使用することが多いと思いますが、[OnValueChanged]
はフィールドごとにコールバックを受けられるのでより細かな制御ができます
[OnValueChanged(nameof(OnValueChanged))]
public int foo;
private void OnValueChanged()
{
Debug.Log(foo);
}
その他の機能
上記以外にも、[Dropdown]
や[ShowNativeProperty]
など使える機能が結構あります。
Readme、公式ドキュメントに一覧があるので見てみてください。