AddComponentMenuとは?

AddComponentMenuは自身で作成したコンポーネントクラスにつける属性になります。

この属性をつけるとUnityEditorComponentメニュー以下のパスを設定することが出来ます。

コンポーネントを用意する

以下の様なコンポーネントを用意し、

Assets/Scripts/Action/PlayerAction.csとして保存しました。

using UnityEngine;

public class PlayerAction : MonoBehaviour
{
}

この時、UnityEditorのメニュー上は、

ComponentScriptsPlayer Actionとして追加されます。

パスを指定する

以下の様にAddComponentMenu属性を追加してパスを指定してみます。

using UnityEngine;

[AddComponentMenu("Action/Player/PlayerAction")]
public class PlayerAction : MonoBehaviour
{
}

AddComponentMenuにより、

ComponentActionPlayerPlayerActionに変わりました。

インスペクタのAdd Componentの挙動

個人的にはあまりメニューからコンポーネントを追加することはないのですが、

AddComponentMenuでパスを指定すると、

インスペクタのAdd Componentボタンからコンポーネントを選択する際もパスが変化します。

ActionPlayerPlayerActionで追加できるのが確認できます。

とはいえ、コンポーネントの名前が分かっているならインクリメンタルサーチで絞り込んだ方が早いのですが。

副産物

というわけで正直あまり意味がなさそうですが、

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で簡易な説明文を追加するという使い道もあります。

🔗関連ページ