【Unity】AddComponentMenuでスクリプトを整理して表示

【Unity】AddComponentMenuでスクリプトを整理して表示

自分で作成したスクリプトは、デフォルトだとコンポーネントメニューからスクリプトとしてアタッチできます。

これだけでも特に不自由することはないのですが、AddComponentMenuのAttributeを使うことで、コンポーネントメニューからスクリプトをアタッチする際、整理して表示することができます。

デフォルトだと全部『Scripts』の下に入っており、スクリプト数が多くなるようなプロジェクトだと探すのが大変なんです。

「検索欄でスクリプト名を検索すればいいんじゃね?」

とは言ってはいけないのだポッター。

 

環境

macOS 10.13 High Sierra

Unity2018.1.0f2

まずはスクリプトの準備

まずは簡単にスクリプトを作ります。

複雑なことさせるつもりもなくて、Constant Forceコンポーネントのように、一定の力を加えるスクリプトにしてみましょ。

FixedUpdate()の中でAddForceを1回だけ呼ぶスクリプトにしました。

この中で注目して欲しいのが、クラス名の上の行。

[]で囲った部分に、AddComponentMenuと書いてあります。

これをつけることで、コンポーネントメニュー内で任意のパスにスクリプトを追加することができます。

デフォルトだと『Scripts』の下に全部のスクリプトが表示されますが、この属性によってコンポーネントメニュー内で整理することができるんです。

試しにスクリプトをアタッチしようとすると、以下の画像のように[ExplorersLab] -> [ObjectMover]のパスで表示されます。あ、ExplorersLabってのは私のアセット開発者名ね(唐突な宣伝)

自分で追加したパスで表示される
自分で追加したパスで表示される

 

Unityのスクリプトリファレンスでは「再起動してね」と書かれていますが、Unity2018でやってみたらUnityを再起動しなくても反映されています。まぁした方が安全かもだけど。

 

通常、『Scripts』内に表示されるスクリプトが任意のパスで表示されることとなり、『Scripts』内には出てこなくなりました。

デフォルトではコンポーネントの並び順はアルファベットの順番になっているので、以下の例だとNとSの間にObjectMoverが来るはず。だけどAddComponentMenuでパスを指定したので、こちらには表示されません。

Nの後にOが来るはず
Nの後にOが来るはず

 

コンポーネントメニューでの表示順指定

上でも触れた通り、デフォルトではコンポーネントメニューでの表示順はアルファベットの順番です。

試しに、『ObjectMover』の他に、『AppleEater』『BananaEater』『CherryEater』を追加してみます。

Start()でメッセージを出力するだけのクラスです。

 

 

こちらも同じく。

 

 

おや? 嘘つきクラスがいるようですね。

本当のクラス名は『CherryEater』なのに、コンポーネントメニューでは『PeachEater』だと主張しているようです。

これらのスクリプトを追加してコンポーネントメニューを確認するとこんな感じ。

AddComponentMenuの引数で指定した名前がアルファベット順に並んでいます。

アルファベット順に表示
アルファベット順に表示

 

ファイル名が『CherryEater』のスクリプトは、AddComponentMenuでは『PeachEater』として表示されています。選択してみると本来のクラス名である『CherryEater』がアタッチされます。なんという嘘つき。

アタッチされるのは本来のクラス名
アタッチされるのは本来のクラス名

 

次は順番を指定しましょ。

順番を指定する場合は、パスの文字列の後ろにint型で順番を指定します。以下の例では『AppleEater』の表示順として[1]を指定しています。

同様に、以下のように順番を指定しました。

スクリプト名 表示名 順番の指定
AppleEater AppleEater 1
BananaEater BananaEater
CherryEater PeachEater 0
ObjectMover ObjectMover 2

『BananaEater』は順番を指定していません。というのは、順番指定のあるものとないものを混ぜたらどうなるか確認したかったんです。

この状態でコンポーネントメニューを開くと以下のようになりました。

か、変わってない……!
か、変わってない……!

 

まさかの変化なし。Unityを再起動しても変わらなかったので、ゲームオブジェクトのコンポーネントメニューだと反映されないのね。

じゃあどこの順番を指定したの?

と思って画面上のメニューバーを見れば、[Component]があるじゃないですか。普段こっちからコンポーネントを追加することがないから忘れてました。

指定したパスを追っていくと以下のようになってました。

順番が反映されたっぽい
順番が反映されたっぽい

 

順番指定をしていない『BananaEater』が一番上に来ていました。その後に指定した順序でスクリプトが並んでいます。

順番が反映されるのはメニューバーの方なのね。

まとめ

今回のポイントをまとめると、

  • AddComponentMenuでスクリプトのパスを指定できる
  • ゲームオブジェクトの[Add Component]ボタンではアルファベット順に表示される
  • 順番指定できるのは、画面上のメニューバーから開くコンポーネントメニューのみ

かな。

いつも使っている、ゲームオブジェクト側のコンポーネントメニューで順番指定したかったなーと思わんでもないので、Unityさんお願いします!

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!