MRが楽しい

MRやVRについて学習したことを書き残す

ContextMenuまたはContextMenuItemを使ってUnityエディターのInspector上で関数呼び出しを行う

本日は Unity の小ネタ枠です。
ContextMenuまたはContextMenuItemを使ってUnityエディターの Inspector 上で関数呼び出しを行う方法を記事にします。
f:id:bluebirdofoz:20210915233345j:plain

ContextMenuとContextMenuItemAttribute

ContextMenu はコンテキストメニューにコマンドを追加することができます。
ContextMenuItemAttribute はフィールドからメソッドを呼び出すメニューを追加します。
docs.unity3d.com
docs.unity3d.com

サンプルスクリプト

以下の ContextMenu と ContextMenuItemAttribute のそれぞれの属性を設定した関数を持つスクリプトを作成しました。
・ContextMenuTest.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ContextMenuTest : MonoBehaviour
{
    // ContextMenuItem はフィールドに設定する
    // 第一引数にコマンド名、第二引数に関数名を指定する
    [ContextMenuItem("Reset", "ResetMessage")]
    public string Message = "TestMessage";

    void ResetMessage()
    {
        Message = "";
        Debug.Log("Message Reset : " + Message.ToString());
    }

    // ContextMenu は関数に設定する
    // コンテキストメニューから関数を実行できる
    [ContextMenu("ExecuteTestMethod")]
    void TestMethod()
    {
        Debug.Log("TestMethod !");
    }
}

f:id:bluebirdofoz:20210915233410j:plain

適当なゲームオブジェクトにスクリプトを設定します。
f:id:bluebirdofoz:20210915233417j:plain

動作確認

最初に ContextMenu の動作を確認します。
ContextMenu を設定した関数はコンポーネント右上のコンテクストメニューを開くと実行できます。
f:id:bluebirdofoz:20210915233430j:plain

次に ContextMenuItemAttribute の動作を確認します。
ContextMenuItemAttribute を設定したフィールドを右クリックすると、コマンドが表示されて実行できます。
プロパティの変化はシーンを再生して確認する必要があります。
f:id:bluebirdofoz:20210915233438j:plain