MenuItem 属性によりメインメニューとインスペクターのコンテキストメニューにメニューアイテムを追加できます。
MenuItem 属性を使うと、どんな静的関数でもメニューコマンドにできます。静的関数のみ MenuItem 属性を使用できます。
ホットキーを作成するには次の特殊記号が使用できます: % (Windows 上で Ctrl キー、OS X 上で Cmd キー)、# (Shift キー)、& (Alt キー)。特殊な修飾キーの組み合わせが必要ない場合は、キーの前に下線 (_) を付けて表示します。例えばホットキー Shift + Alt + G のメニューを作成するには "MyMenu/Do Something #&g"
を使用します。G キーのみ(修飾キーなし)でホットキーを作成するには "MyMenu/Do Something _g"
を使用します。
いくつかの特殊記号はホットキーとしてサポートされていて、例えば "#LEFT" は Shift + 左矢印キーにマッピングされます。このようにサポートされているキーは上下左右の矢印キー、F1 ~ F12 キー、Home キー、End キー、Page Up キー、Page Down キーです。( LEFT, RIGHT, UP, DOWN, F1 .. F12, HOME, END, PGUP, PGDN )
ホットキーの文字列の前にスペース文字を含める必要があります( "MyMenu/Do _g" はホットキーとして認識されず、一方で "MyMenu/Do _g"
は認識されます)
When adding menu items to the "GameObject/" menu for creating custom game objects be sure to
call GameObjectUtility.SetParentAndAlign to ensure that the new GameObject is reparented
correctly in the case of a context click (see example below). Your function should also call
Undo.RegisterCreatedObjectUndo to make the creation undoable and set Selection.activeObject
to the newly created object. Also note that in order for a menu item in "GameObject/" to be
propagated to the hierarchy Create dropdown and hierarchy context menu, it must be grouped
with the other GameObject creation menu items. This can be achieved by setting its priority
to 10 (see example below). Note that for legacy purposes MenuItems in "GameObject/Create Other"
with no explicit priority set will receive a priority of 10 instead of the default 1000 -
we encourage using a more descriptive category name than "Create Other" and explicitly
setting the priority to 10.
using UnityEditor; using UnityEngine; public class MenuTest : MonoBehaviour {
// Add a menu item named "Do Something" to MyMenu in the menu bar. [MenuItem ("MyMenu/Do Something")] static void DoSomething () { Debug.Log ("Doing Something..."); }
// Validated menu item. // Add a menu item named "Log Selected Transform Name" to MyMenu in the menu bar. // We use a second function to validate the menu item // so it will only be enabled if we have a transform selected. [MenuItem ("MyMenu/Log Selected Transform Name")] static void LogSelectedTransformName () { Debug.Log ("Selected Transform is on " + Selection.activeTransform.gameObject.name + "."); }
// Validate the menu item defined by the function above. // The menu item will be disabled if this function returns false. [MenuItem ("MyMenu/Log Selected Transform Name", true)] static bool ValidateLogSelectedTransformName () { // Return false if no transform is selected. return Selection.activeTransform != null; }
// Add a menu item named "Do Something with a Shortcut Key" to MyMenu in the menu bar // and give it a shortcut (ctrl-g on Windows, cmd-g on macOS). [MenuItem ("MyMenu/Do Something with a Shortcut Key %g")] static void DoSomethingWithAShortcutKey () { Debug.Log ("Doing something with a Shortcut Key..."); }
// Add a menu item called "Double Mass" to a Rigidbody's context menu. [MenuItem ("CONTEXT/Rigidbody/Double Mass")] static void DoubleMass (MenuCommand command) { Rigidbody body = (Rigidbody)command.context; body.mass = body.mass * 2; Debug.Log ("Doubled Rigidbody's Mass to " + body.mass + " from Context Menu."); }
// Add a menu item to create custom GameObjects. // Priority 1 ensures it is grouped with the other menu items of the same kind // and propagated to the hierarchy dropdown and hierarch context menus. [MenuItem("GameObject/MyCategory/Custom Game Object", false, 10)] static void CreateCustomGameObject(MenuCommand menuCommand) { // Create a custom game object GameObject go = new GameObject("Custom Game Object"); // Ensure it gets reparented if this was a context click (otherwise does nothing) GameObjectUtility.SetParentAndAlign(go, menuCommand.context as GameObject); // Register the creation in the undo system Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); Selection.activeObject = go; } }
MenuItem | メニューアイテムを作成し、メニューアイテムが選択されたときに指定された static 関数を実行します |