커맨드 이벤트는 Unity 에디터가 최상위 메뉴 동작과 그에 상응하는 키보드 단축키를 에디터 UI로 전달할 수 있도록 전송됩니다.
다음은 사용 가능한 커맨드입니다.
Copy
Cut
Paste
Delete
SoftDelete
Duplicate
FrameSelected
FrameSelectedWithLock
SelectAll
Find
FocusProjectWindow
이벤트 | 설명 | 트리클다운 | 버블업 | 취소 가능 |
---|---|---|---|---|
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();
}
}
}
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.