MenuItem Manual     Reference     Scripting  
Scripting > Editor Attributes > MenuItem
MenuItem Inherits from Attribute

The MenuItem attribute allows you to add menu items to the main menu and inspector context menus.

Note: This is an editor class. To use it you have to place your script in Assets/Editor inside your project folder. Editor classes are in the UnityEditor namespace so for C# scripts you need to add "using UnityEditor;" at the beginning of the script.

The MenuItem attribute turns any static function into a menu command. Only static functions can use the MenuItem attribute.

To create a hotkey you can use the following special characters: % (ctrl on Windows, cmd on OS X), # (shift), & (alt), _ (no key modifiers). For example to create a menu with hotkey shift-alt-g use "MyMenu/Do Something #&g". To create a menu with hotkey g and no key modifiers pressed use "MyMenu/Do Something _g". A hotkey text must be preceded with a space character ("MyMenu/Do_g" won't be interpreted as hotkey, while "MyMenu/Do _g" will).

// JavaScript example:

// Add a menu item named "Do Something" to MyMenu in the menu bar.
@MenuItem ("MyMenu/Do Something")
static function 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 function 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 function 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 OS X).
@MenuItem ("MyMenu/Do Something with a Shortcut Key %g")
static function 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 function DoubleMassFromContext (command : MenuCommand) {
var body : Rigidbody = command.context;
body.mass = body.mass * 2;
Debug.Log ("Doubled Rigidbody's Mass to " + body.mass + " from Context Menu.");
}

// C# example:
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 OS X).
[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.");
}
}

Constructors
MenuItem

Creates a menu item and invokes the static function following it, when the menu item is selected.