本日は 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フォルダに配置することでエディター用のスクリプトとして扱われ、ビルド時には参照しないようにできます。