Unity ContextMenuItemで変数ごとのメニューを設定

以前UnityContextMenu Attribute を使って、Inspector ウィンドウ独自コンポーネントの設定画面のコンテキストメニューに追加したメニューアイテムからメンバ関数を呼び出す手順を紹介しました。
スクリプトのメンバ関数の前に記述するだけで、簡単にメニューアイテムを追加し関数を呼び出せました。

今回は、コンポーネントよりもさらに細かくフィールド(変数)ごとのコンテキストメニューを設定できる ContextMenuItem Attribute を紹介します。
変数ごとのコンテキストメニューなので、その変数に関するメニューをまとめておくと、メニューがわかりやすくなり、作業効率の向上が期待できます。

ContextMenuItem Attribute の実装例

ContextMenuItem Attribute を使ったコードの例です。

using UnityEngine;

public class StudyPropertyAttribute : MonoBehaviour
{
    // IntValue フィールドのコンテキストメニューを設定します。
    [ContextMenuItem("Set Random Value", "SetRandomValue")]
    public int IntValue = 0;

    // IntValue フィールドのコンテキストメニュー "Set Random Value" を選択されたときに呼ばれる関数です。
    public void SetRandomValue()
    {
        IntValue = Random.Range(0, 10);
    }
}

6 行目の ContextMenuItem は、その次に宣言されている変数 IntValue のコンテキストメニューのメニューアイテムを追加します。

10 行目に書かれている関数は ContextMenuItem で追加したメニューアイテムから呼び出される関数です。
関数名はContextMenuItem の第二引数の文字列と同じにします。

ContextMenuItem コンストラクタの引数

ContextMenuItem のコンストラクタは 1 つです。

  • public ContextMenuItemAttribute (string name, string function);

引数は以下の 2 つです。

  • 第 1 引数 string name
    コンテキストメニューに表示されるメニューアイテムの文字列です。
  • 第 2 引数 string function
    メニューアイテムが選択された際に呼び出す関数名です。該当するメンバ関数が呼び出されます。
    関数の型は公式サイトの例では void 関数名() だったので、コードの例でも戻り値なし、引数なしの関数を定義しました。

また、オプション引数として int order があり、そのコンテキストメニュー内での表示の順番を変更することができます。
order の値を設定したい場合は次のように記述します。

 [ContextMenuItem("Set Random Value", "SetRandomValue", order = 1)]

ContextMenuItem を適用したフィールドのコンテキストメニュー

先ほどのスクリプトゲームオブジェクトコンポーネントとして追加して、変数名を右クリックすると、そのフィールドのコンテキストメニューに先ほど ContextMenuItem で指定した “Set Random Value” が追加されています。

Unity ContextMenuItem Attribute でフィールドごとのコンテキストメニューにメニューアイテムを追加した例

メニューアイテムが呼び出す SetRandomValue メンバ関数IntValue の値を 0 ~ 9 の範囲でランダムに変更します。

ContextMenuItem Attribute で追加した IntValue フィールドのコンテキストメニューのメニューアイテムからメンバ関数呼び出すたびにランダムな値が設定されました。

Unity ContextMenuItem Attribute でフィールドごとのコンテキストメニューにメニューアイテムを追加しメンバ関数を呼び出している様子(ランダムに値を変える処理)

まとめ

今回は Unity の Inspector ウィンドウコンポーネント設定画面で、フィールド(変数)単位で作られるコンテキストメニューにメニューアイテムを追加し、メンバ関数呼び出す ContextMenuItem Attribute について紹介しました。
コンポーネント全体に関する処理は ContextMenu で、変数ごとの処理は ContextMenuItem と分けるとメニューが使いやすくなりそうです。

参照サイト Thank You!

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました