個人的に一度調べてみたかった属性についてブログに書いていきたいと思います。いろいろな制約や拡張ができるので、上手く組み合わせて使えば作業速度や効率が良くなると思います。
Attributes - 属性
クラスに成約をもたせることができます。
RequireComponent
指定したクラスが必要になります。 例えばTextクラスが必ず必要な場合には次のような記述を行います。 [c] [RequireComponent(typeof(UnityEngine.UI.Text))] public class Hoge : MonoBehaviour {
} [/c]
もし必要なクラスがない場合にはダイアログが表示されます。
SerializeField
Inspector上のprivateのフィールドを設定できます。(これをシリアライズ化とも呼ぶらしい) Publicでも同じようなことはできますが、他のクラスから参照ができてしまうので、限定して利用したい場合に使います。 [c] [SerializeField] private string hogeText; [/c]
AddComponentMenu
「AddComponentMenu」メニューのComponent」に特定のクラスを指定する場合に利用します。 次のコードでは「Hoge、AddComponentMenu」に追加します。 [c] [AddComponentMenu("Hoge/AddComponentMenu")] public class Hoge : MonoBehaviour {
} [/c]
画面上では次のようになります。
ColorUsage
アルファを設定できるかどうかを調整できます。 ColorUsage
[c] [ColorUsage(false)] [SerializeField] private Color _color; [/c]
アルファの項目が無くなっています。
ContextMenu
ContextMenuを設定すれば、Inspector上で右クリックを押すとメソッドを実行できるようになります。 [c] [ContextMenu("Test")] public void Test() { Debug.LogError("Test"); } [/c]
ContextMenuItem
ContextMenuItemは指定したフィールドで右クリックをすると、引数で指定したメソッドを呼び出せます。 ContextMenuItem - Unity Documentation
[c] [ContextMenuItem("Test","Test")] [SerializeField] private Color _color; [/c]
DisallowMultipleComponent
DisallowMultipleComponentは同一のコンポーネントをアタッチできなくします。 [c] [DisallowMultipleComponent] public class Hoge : MonoBehaviour { } [/c]