MRが楽しい

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

Unityでスクリプトからメニュー項目を実行する

本日は Unity の小ネタ枠です。
Unityでスクリプトからメニュー項目を実行する方法です。

EditorApplication.ExecuteMenuItem

Unityでスクリプトからメニュー項目を実行するにはEditorApplication.ExecuteMenuItem関数を利用します。
引数にメニューのパスを指定してスクリプトから処理を実行できます。
docs.unity3d.com

// メニューの GameObject -> Create Empty を実行する
EditorApplication.ExecuteMenuItem("GameObject/Create Empty");

本関数では以下のように自作したメニュー項目も指定可能です。
bluebirdofoz.hatenablog.com

サンプルスクリプト

[GameObject -> Create Empty]等のメニュー項目を実行して3階層のEmptyオブジェクトを作成するサンプルスクリプトを作成しました。
・ExecuteMenuItemTest.cs

using UnityEditor;
using UnityEngine;

public class ExecuteMenuItemTest
{
    /// <summary>
    /// メニューから MenuItemTest -> CreateEmptyObject を選択して処理を実行する
    /// </summary>
    [MenuItem("MenuItemTest/CreateEmptyObject %#l")]
    private static void CreateEmptyObjectTest()
    {
        // メニューの GameObject -> Create Empty 等を実行して3階層のEmptyオブジェクトを作成する
        EditorApplication.ExecuteMenuItem("GameObject/Create Empty");
        EditorApplication.ExecuteMenuItem("GameObject/Create Empty Child");
        EditorApplication.ExecuteMenuItem("GameObject/Create Empty Child");
    }
}

自作のメニュー項目から処理を実行すると3階層の Empty オブジェクトが生成されました。

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

error CS0103: The name 'EditorApplication' does not exist in the current context

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