MRが楽しい

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

Unityで自作のメニュー項目を追加する その2(プロジェクトウィンドウにメニューを追加する)

本日は Unity の小ネタ枠です。
Unityでスクリプトからプロジェクトウィンドウにメニュー項目を実行する方法です。

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

プロジェクトウィンドウにメニューを追加する

以下の2種類のパスはプロジェクトウィンドウの特別なパスとして利用されます。
・Assets/
・Assets/Create/

Assets/

プロジェクトウィンドウ上で右クリックした場合に表示されるメニュー項目を追加できます。

[MenuItem("Assets/AssetsShowLogTest")]


Assets/Create/

プロジェクトウィンドウ右上の[+]ボタンをクリックした場合に表示されるメニュー項目を追加できます。

[MenuItem("Assets/Create/AssetsCreateShowLogTest")]



サンプルスクリプト

追加のメニューを実行するとログ出力を行うサンプルスクリプトを作成しました。
・SpecialMenuItemTest.cs

using UnityEditor;
using UnityEngine;

public class SpecialMenuItemTest : MonoBehaviour
{
    /// <summary>
    /// プロジェクトビューで右クリックしたときのメニューに表示されるアイテムを追加する
    /// </summary>
    [MenuItem("Assets/AssetsShowLogTest")]
    private static void AssetsShowLogTest()
    {
        Debug.Log("プロジェクトビューで右クリックしたときのメニューに表示されるアイテムを追加する");
    }
    
    /// <summary>
    /// プロジェクトビューの[+]ボタンで開くメニューに表示されるアイテムを追加する
    /// </summary>
    [MenuItem("Assets/Create/AssetsCreateShowLogTest")]
    private static void AssetsCreateShowLogTest()
    {
        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フォルダに配置することでエディター用のスクリプトとして扱われ、ビルド時には参照しないようにできます。