커맨드 이벤트는 Unity 에디터가 최상위 메뉴 동작과 그에 상응하는 키보드 단축키를 에디터 UI로 전달할 수 있도록 전송됩니다.
다음은 사용 가능한 커맨드입니다.
CopyCutPasteDeleteSoftDeleteDuplicateFrameSelectedFrameSelectedWithLockSelectAllFindFocusProjectWindow| 이벤트 | 설명 | 트리클다운 | 버블업 | 취소 가능 | 
|---|---|---|---|---|
| ValidateCommandEvent | 에디터는 패널의 요소가 커맨드를 처리할지 여부를 결정할 때 이 이벤트를 전송합니다. | ✔ | ✔ | ✔ | 
| ExecuteCommandEvent | 에디터는 패널의 요소가 커맨드를 실행할 때 이 이벤트를 전송합니다. | ✔ | ✔ | ✔ | 
**target**: 키보드 포커스가 있는 요소입니다. 포커스가 있는 요소가 없으면 값이null`입니다.
commandName: 확인 또는 실행하는 커맨드입니다.
ValidateCommandEvent 이벤트는 EditorWindow에 커맨드를 실행할 수 있는지 여부를 묻습니다.예를 들어, 에디터는 확인 커맨드 이벤트의 결과에 따라 메뉴 항목을 활성화 또는 비활성화할 수 있습니다.
에디터가 커맨드를 실행할 수 있는지 여부를 확인하려면 다음 단계를 따르십시오.
ValidateCommandEvent에 대한 콜백을 등록합니다.commandName 프로퍼티를 테스트합니다.Event.StopPropogation() 메서드를 호출합니다.ExecuteCommandEvent 이벤트는 에디터 창에 커맨드 실행을 요청합니다.
이 이벤트가 확인 이벤트를 따르더라도 이전 확인에 관계없이 먼저 작업이 가능한지 확인하는 것이 가장 좋습니다.
커맨드에 응답하려면:
ExecuteCommandEvent에 대한 콜백을 등록합니다.commandName 프로퍼티를 테스트합니다.Event.StopPropogation() 메서드를 호출하여 에디터가 주석이 실행되었음을 알 수 있도록 합니다.다음 예는 커맨드 이벤트를 사용하여 커스텀 에디터 창에서 복사 및 붙여넣기를 지원합니다.이 예는 커스텀 에디터 창에 과일 리스트를 표시합니다.사용자는 키보드 단축키를 사용하여 과일을 복사하여 붙여넣을 수 있습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;
public class CopyPasteExample :EditorWindow
{
    [MenuItem("Window/UI Toolkit Examples/CopyPasteExample")]
    public static void Show()
    {
        GetWindow<CopyPasteExample>();
    }
    readonly List<string> fruits = new ()
    {
        "Banana",
        "Apple",
        "Lime",
        "Orange"
    };
    
    ListView m_ListView;
    public void CreateGUI()
    {
        Func<VisualElement> makeItem = () => new Label();
        Action<VisualElement, int> bindItem = (e, i) => (e as Label).text = fruits[i];
        m_ListView = new ListView();
        m_ListView.makeItem = makeItem;
        m_ListView.bindItem = bindItem;
        m_ListView.itemsSource = fruits;
        m_ListView.selectionType = SelectionType.Single;
        
        m_ListView.RegisterCallback<ValidateCommandEvent>(OnValidateCommand);
        m_ListView.RegisterCallback<ExecuteCommandEvent>(OnExecuteCommand);
        
        rootVisualElement.Add(m_ListView);
    }
    void OnExecuteCommand(ExecuteCommandEvent evt)
    {
        if (evt.commandName == "Copy" && m_ListView.selectedIndices.Count() > 0)
        {
            EditorGUIUtility.systemCopyBuffer = fruits[m_ListView.selectedIndex];
            evt.StopPropagation();
        }
        else if (evt.commandName == "Paste" && !string.IsNullOrEmpty(EditorGUIUtility.systemCopyBuffer))
        {
            fruits.Add(EditorGUIUtility.systemCopyBuffer);
            m_ListView.RefreshItems();
            evt.StopPropagation();
        }
    }
    void OnValidateCommand(ValidateCommandEvent evt)
    {
        if (evt.commandName == "Copy" && m_ListView.selectedIndices.Count() > 0)
        {
            evt.StopPropagation();
        }
        else if (evt.commandName == "Paste" && !string.IsNullOrEmpty(EditorGUIUtility.systemCopyBuffer))
        {
            evt.StopPropagation();
        }
    }
}