Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


DropdownMenu

Represents a dropdown menu, similar to the menus seen in most Operating Systems (OS) and across the Unity Editor.
Read time 2 minutesLast updated 4 days ago

Definition

public class DropdownMenu

Remarks

Use this class to set custom DropdownMenuItem that executes a DropdownMenuAction based on its status.
Use this class to create OS-like dropdown menus in the Unity Editor. For more generic dropdown menus designed for both Editor and Runtime use, use GenericDropdownMenu.
The following example shows how to create a dropdown menu with submenus and conditional actions.

Examples

using UnityEditor;using UnityEngine;using UnityEngine.UIElements;public class DropdownMenuExample: EditorWindow{ public string[] playerNames = new string[] { "Alex", "Carol", "Ethan", "Jen" }; [MenuItem("Window/UI Toolkit/DropdownMenu Example")] public static void ShowExample() { DropdownMenuExample wnd = GetWindow<DropdownMenuExample>(); wnd.titleContent = new GUIContent("DropdownMenu Example"); } public void CreateGUI() { var window = EditorWindow.GetWindow<EditorWindow>(); var root = window.rootVisualElement; // Create a new dropdown menu var playersContainer = new VisualElement(); var instructionLabel = new Label("Right Click on the player to edit their details"); root.Add(instructionLabel); root.Add(playersContainer); for(int i = 0; i < playerNames.Length; i++) { var playerName = playerNames[i]; // Set an ID for each player label var id = i+1; var playerLabel = new Label { text = playerName, name = $"label{playerName}"}; playerLabel.AddManipulator(CreateDropdownMenu()); playersContainer.Add(playerLabel); } } public IManipulator CreateDropdownMenu() { ContextualMenuManipulator menuManipulator = new ContextualMenuManipulator( menuEvent => { if (menuEvent.target is not Label playerLabel) return; // Player Name Actions menuEvent.menu.AppendAction("Retire Player", a => { playerLabel.text = $"[RETIRED] {playerLabel.text}"; playerLabel.style.backgroundColor = Color.gray; playerLabel.style.color = Color.red; playerLabel.userData = "retired"; }, DropdownMenuAction.AlwaysEnabled, playerLabel.userData); menuEvent.menu.AppendAction("Set Player To Gold Status", a => { playerLabel.style.color = Color.yellow; }); // Separate Team Actions from Player Name Actions menuEvent.menu.AppendSeparator(); // Create a sub menu containing both teams menuEvent.menu.AppendAction("Change Team/Lizards", a => { playerLabel.style.backgroundColor = Color.green; }, ChangeTeamActionStatus, playerLabel.userData); menuEvent.menu.AppendAction("Change Team/Sharks", a => { playerLabel.style.backgroundColor = Color.cyan; }, ChangeTeamActionStatus, playerLabel.userData); }); return menuManipulator; } public DropdownMenuAction.Status ChangeTeamActionStatus(DropdownMenuAction a) { // If a player is retired, hide the team change options return a.userData is string and "retired" ? DropdownMenuAction.Status.Hidden : DropdownMenuAction.Status.Normal; }}

Properties

Property

Description

allowDuplicateNamesDetermines whether the menu allows duplicate names.

Methods

Method

Description

AppendActionAdds an item that executes an action in the dropdown menu.
AppendSeparatorAdds a separator line in the menu.
ClearItemsClears all items from the menu.
InsertActionAdds an item that executes an action in the dropdown menu.
InsertSeparatorAdds a separator line in the menu.
MenuItemsGets the list of menu items.
PrepareForDisplayGets the status of all items by calling their status callback and removes the excess separators.
RemoveItemAtRemoves the menu item at index.