MRが楽しい

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

Unityで自作のメニュー項目を追加する

本日は Unity の小ネタ枠です。
Unityで自作のメニュー項目を追加する方法です。

Unityで自作のメニュー項目を追加するにはMenuItemを属性として指定します。
MenuItemは静的関数(static)のみが利用可能です。
docs.unity3d.com

[MenuItem("MenuItemTest/ShowLog")]

また、引数にショートカットキーを指定することができます。
スペース文字を挟んで以下のように文字を組み合わせて指定します。

// Shift + L キーのショートカットキーを指定
[MenuItem("MenuItemTest/ShowLog #l")]

ショートカットキーの指定には以下の特殊文字が利用できます。

特殊文字 対応キー
% Ctrlキー
# Shiftキー
& Altキー

単体のキーをショートカットキーに指定したい場合は以下のように _ を付与します。

// G キーのショートカットキーを指定
[MenuItem("MenuItemTest/ShowLog _g")]

既存のショートカットキーと指定が重複した場合は既存のものが優先されるようです。

サンプルスクリプト

以下の[MenuItemTest -> ShowLog]のメニューを実行するとログ出力を行うサンプルスクリプトを作成しました。
・MenuItemTest.cs

using UnityEditor;
using UnityEngine;

public class MenuItemTest
{
    /// <summary>
    /// メニューから MenuItemTest -> ShowLog を選択して処理を実行する
    /// </summary>
    [MenuItem("MenuItemTest/ShowLog #l")]
    private static void ShowLogTest()
    {
        Debug.Log("ログ表示");
    }
}

MenuItemはUnityエディター上でのみ動作するため、ビルド時に以下のエラーが発生します。

error CS0246: The type or namespace name 'MenuItemAttribute' could not be found (are you missing a using directive or an assembly reference?)

スクリプトをEditorフォルダに配置することでエディター用のスクリプトとして扱われ、ビルド時には参照しないようにできます。

メニューに[MenuItemTest -> ShowLog]が追加され、これを実行するとログが表示できました。