UI 툴킷의 이벤트는 HTML 이벤트와 유사합니다. 이벤트가 발생하면__ UI__(사용자 인터페이스) 사용자가 애플리케이션과 상호 작용하도록 해 줍니다. Unity는 현재 3개의 UI 시스템을 지원합니다. 자세한 정보
See in Glossary 툴킷은 이벤트를 타겟 시각적 요소와 시각적 트리의 전파 경로 내 모든 요소로 전송합니다.
이벤트 처리 시퀀스는 다음과 같습니다.
이벤트가 전파 경로를 따라 이동하면 Event.currentTarget 프로퍼티가 현재 이벤트를 처리하는 요소에 업데이트됩니다. 이벤트 콜백 함수 내에서:
Event.currentTarget은 콜백이 등록되는 시각적 요소입니다.Event.target은 원본 이벤트가 발생하는 시각적 요소입니다.자세한 내용은 디스패치 이벤트를 참조하십시오.
이벤트 콜백을 등록하여 기존 클래스의 개별 인스턴스 동작(예: 텍스트 레이블에 대한 마우스 클릭에 응답)을 커스터마이즈할 수 있습니다. 이벤트에 대한 콜백을 등록하려면 RegisterCallback() 메서드를 사용하여 요소에 콜백을 직접 등록합니다.
전파 경로를 따라 전달되는 각 요소(타겟 제외)는 다음과 같이 하나의 이벤트를 두 번 수신할 수 있습니다.
기본적으로 등록된 콜백은 타겟 단계와 버블업 단계에서 실행됩니다. 이 기본 동작을 사용하면 부모 요소가 자식 요소 다음에 반응합니다.
한편, 부모 요소가 자식보다 먼저 반응하도록 하려면 다음과 같은 TrickleDown.TrickleDown 옵션을 사용하여 콜백을 등록합니다.
using UnityEngine;
using UnityEngine.UIElements;
...
VisualElement myElement = new VisualElement();
// Register a callback for the trickle-down phase.
myElement.RegisterCallback<PointerDownEvent>(MyCallback, TrickleDown.TrickleDown);
...
이는 디스패처에 타겟 단계와 트리클다운 단계에서 콜백을 실행하라고 알립니다.
커스텀 동작을 특정 시각적 요소에 추가하려면 다음과 같이 해당 요소에 이벤트 콜백을 등록합니다.
// Register a callback on a pointer down event
myElement.RegisterCallback<PointerDownEvent>(MyCallback);
콜백 함수의 서명은 다음과 같습니다.
void MyCallback(PointerDownEvent evt) { /* ... */ }
자식 요소가 이벤트를 처리하는 요소의 경우 콜백을 등록하려면 Q() 메서드를 사용하여 자식 요소를 찾아 콜백을 등록합니다.
다음 예시에서는 슬라이더의 드래그 컨테이너 요소에 콜백을 등록하여 슬라이더의 포인터 업 이벤트를 처리합니다. 이 경우 슬라이더 자체가 아니라 드래그 컨테이너 요소에 콜백을 등록해야 합니다. 드래그 컨테이너는 포인터 다운 이벤트 중에 포인터를 캡처하므로 다음 포인터 업 이벤트의 유일한 리시버가 됩니다.
var dragContainer = slider.Q("unity-drag-container");
dragContainer.RegisterCallback<PointerUpEvent> ( evt => Debug.Log("PointerUpEvent"));
참고: 한 이벤트에 대해 여러 콜백을 등록할 수 있습니다. 그러나 동일한 이벤트 및 전파 단계에 동일한 콜백 함수를 한 번만 등록할 수 있습니다.
VisualElement에서 콜백을 제거하려면 myElement.UnregisterCallback() 메서드를 호출합니다.
MonoBehaviour에서 시각적 요소에 액세스하는 방법에 대한 자세한 내용은 런타임 UI 시작하기를 참조하십시오.
커스텀 데이터를 콜백과 함께 이벤트로 보낼 수 있습니다. 커스텀 데이터를 연결하려면 호출을 확장하여 콜백을 등록해야 합니다.
다음 예시에서는 PointerDownEvent에 대한 콜백을 등록하고 커스텀 데이터를 콜백 함수로 보냅니다.
// Send user data along to the callback
myElement.RegisterCallback<PointerDownEvent, MyType>(MyCallbackWithData, myData);
콜백 함수의 서명은 다음과 같습니다.
void MyCallbackWithData(PointerDownEvent evt, MyType data) { /* ... */ }
UI 컨트롤은 value 프로퍼티를 사용하여 내부 상태에 대한 데이터를 보유할 수 있습니다. 예시:
Toggle은 Toggle이 켜지거나 꺼질 때 변경되는 부울 값을 보유합니다.IntegerField는 필드의 값을 보유하는 정수를 보유합니다.컨트롤 값 획득:
컨트롤에서 직접 값을 가져옵니다(int val = myIntegerField.value;).
컨트롤이 보낸 ChangeEvent를 수신하고 변경 사항이 발생할 때 처리합니다. 다음과 같이 이벤트에 대한 콜백을 등록해야 합니다.
//RegisterValueChangedCallback is a shortcut for RegisterCallback<ChangeEvent>.
//It constrains the right type of T for any VisualElement that implements an
//INotifyValueChange interface.
myIntegerField.RegisterValueChangedCallback(OnIntegerFieldChange);
콜백 함수의 서명은 다음과 같습니다.
void OnIntegerFieldChange(ChangeEvent<int> evt) { /* ... */ }
컨트롤의 값을 변경하려면 다음을 수행합니다.
value 변수를 직접 변경합니다(myControl.value = myNewValue;). 그러면 새 ChangeEvent가 트리거됩니다.myControl.SetValueWithoutNotify(myNewValue);을 사용합니다. 이는 새로운 ChangeEvent를 트리거하지 않습니다.자세한 내용은 이벤트 변경을 참조하십시오.