GenericMenu lets you create custom context menus and dropdown menus.
The example below opens an Editor window with a button. Clicking the button displays a context menu, which lets you change the color to apply to the GUI in the window. Copy the example's contents into a script called GenericMenuExample.cs and put it into a folder in your project called Editor.
.
using UnityEngine; using UnityEditor;
public class GenericMenuExample : EditorWindow { // open the window from the menu item Example -> GUI Color [MenuItem("Example/GUI Color")] static void Init() { EditorWindow window = GetWindow<GenericMenuExample>(); window.position = new Rect(50f, 50f, 200f, 24f); window.Show(); }
// serialize field on window so its value will be saved when Unity recompiles [SerializeField] Color m_Color = Color.white;
void OnEnable() { titleContent = new GUIContent("GUI Color"); }
// a method to simplify adding menu items void AddMenuItemForColor(GenericMenu menu, string menuPath, Color color) { // the menu item is marked as selected if it matches the current value of m_Color menu.AddItem(new GUIContent(menuPath), m_Color.Equals(color), OnColorSelected, color); }
// the GenericMenu.MenuFunction2 event handler for when a menu item is selected void OnColorSelected(object color) { m_Color = (Color)color; }
void OnGUI() { // set the GUI to use the color stored in m_Color GUI.color = m_Color;
// display the GenericMenu when pressing a button if (GUILayout.Button("Select GUI Color")) { // create the menu and add items to it GenericMenu menu = new GenericMenu();
// forward slashes nest menu items under submenus AddMenuItemForColor(menu, "RGB/Red", Color.red); AddMenuItemForColor(menu, "RGB/Green", Color.green); AddMenuItemForColor(menu, "RGB/Blue", Color.blue);
// an empty string will create a separator at the top level menu.AddSeparator("");
AddMenuItemForColor(menu, "CMYK/Cyan", Color.cyan); AddMenuItemForColor(menu, "CMYK/Yellow", Color.yellow); AddMenuItemForColor(menu, "CMYK/Magenta", Color.magenta); // a trailing slash will nest a separator in a submenu menu.AddSeparator("CMYK/"); AddMenuItemForColor(menu, "CMYK/Black", Color.black);
menu.AddSeparator("");
AddMenuItemForColor(menu, "White", Color.white);
// display the menu menu.ShowAsContext(); } } }
allowDuplicateNames | Allow the menu to have multiple items with the same name. |
AddDisabledItem | Add a disabled item to the menu. |
AddItem | Add an item to the menu. |
AddSeparator | Add a seperator item to the menu. |
DropDown | Show the menu at the given screen rect. |
GetItemCount | Get number of items in the menu. |
ShowAsContext | Show the menu under the mouse when right-clicked. |
MenuFunction | Callback function, called when a menu item is selected. |
MenuFunction2 | Callback function with user data, called when a menu item is selected. |
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.