### Первый способ ```csharp valueLabel.AddManipulator(new ContextualMenuManipulator(evt => { evt.menu.AppendAction("Action 1", action => Debug.Log("Action 1 executed")); evt.menu.AppendAction("Action 2", action => Debug.Log("Action 2 executed")); })); ``` ### Второй способ Создаем свой класс, который будет наследоваться от `ContextualMenuManipulator` ```csharp public class FieldContextMenuManipulator : ContextualMenuManipulator { private readonly string fieldKey; // просто поле для примера private readonly CustomEditorWindow editorWindow; // Ссылка на экземпляр окна редактора // Конструктор public FieldContextMenuManipulator(CustomEditorWindow editorWindow, string fieldKey) : base(evt => PopulateMenu(evt, editorWindow, fieldKey)) // Устанавливает обработчик для создания контекстного меню { this.fieldKey = fieldKey; this.editorWindow = editorWindow; } // Статический метод, который создает и заполняет контекстное меню // Должен быть статическим, так как метод используется в статическом контексте private static void PopulateMenu(ContextualMenuPopulateEvent evt, CustomEditorWindow editorWindow, string fieldKey) { // Добавление пункта меню "Action 1", который вызывает метод MyActionMethod1 с переданным ключом поля evt.menu.AppendAction("Action 1", action => editorWindow.MyActionMethod1(fieldKey)); // Добавление пункта меню "Action 2", который вызывает метод MyActionMethod2 с переданным ключом поля evt.menu.AppendAction("Action 2", action => editorWindow.MyActionMethod2(fieldKey)); } } ``` Эти два метода нужно добавить в `CustomEditorWindow` (наследник `EditorWindow`) ```csharp public void MyActionMethod1(string fieldKey) { Debug.Log(quot;Action 1 executed for field: {fieldKey}"); // Ваш код для выполнения действия 1 } public void MyActionMethod2(string fieldKey) { Debug.Log(quot;Action 2 executed for field: {fieldKey}"); // Ваш код для выполнения действия 2 } ``` Добавляем в `label` контекстное меню. ```csharp label.AddManipulator(new FieldContextMenuManipulator(this, fieldKey)); ```