AddComponentMenuとは?
AddComponentMenu
は自身で作成したコンポーネントクラスにつける属性になります。
この属性をつけるとUnityEditor
のComponent
メニュー以下のパスを設定することが出来ます。
コンポーネントを用意する
以下の様なコンポーネントを用意し、
Assets/Scripts/Action/PlayerAction.csとして保存しました。
using UnityEngine;
public class PlayerAction : MonoBehaviour
{
}
この時、UnityEditor
のメニュー上は、
Component
→Scripts
→Player Action
として追加されます。
パスを指定する
以下の様にAddComponentMenu
属性を追加してパスを指定してみます。
using UnityEngine;
[AddComponentMenu("Action/Player/PlayerAction")]
public class PlayerAction : MonoBehaviour
{
}
AddComponentMenu
により、
Component
→Action
→Player
→PlayerAction
に変わりました。
インスペクタのAdd Componentの挙動
個人的にはあまりメニューからコンポーネントを追加することはないのですが、
AddComponentMenu
でパスを指定すると、
インスペクタのAdd Component
ボタンからコンポーネントを選択する際もパスが変化します。
Action
→Player
→PlayerAction
で追加できるのが確認できます。
とはいえ、コンポーネントの名前が分かっているならインクリメンタルサーチで絞り込んだ方が早いのですが。
副産物
というわけで正直あまり意味がなさそうですが、
AddComponentMenu
を指定してコンポーネントをGameObject
に追加するとある変化が起きています。
インスペクタ上のコンポーネント名から、(Script)
が無くなっています。
AddComponentMenu
のパスを以下の様に変更してみます。
using UnityEngine;
[AddComponentMenu("Action/Player/ここがインスペクタに表示される")]
public class PlayerAction : MonoBehaviour
{
}
このようになりました。
スクリプトリファレンスには特に書いてないですが、AddComponentMenu
のパスの最後がコンポーネントの名前をして表示されます。
このままだとPlayerAction
という名前だと検索できなくなります。
そのため以下の様に変更してみます。
using UnityEngine;
[AddComponentMenu("Action/Player/PlayerAction_プレイヤーの行動制御")]
public class PlayerAction : MonoBehaviour
{
}
これでコンポーネント名と説明文を載せられるようになりました。
まとめ
今回はAddComponentMenu
について説明しました。
AddComponentMenu
を使うことで、
Component
メニュー上のパスを指定できるAddComponent
で選択する際の階層を指定できる
が出来るようになります。
また、パスの最後の部分がインスペクタ上のコンポーネント名にもなるので、
次作コンポーネントの役割を分かりやすくするために
AddComponent
で簡易な説明文を追加するという使い道もあります。