Version: 2023.2
언어: 한국어
요소의 포커스 순서
매니퓰레이터

커스텀 컨트롤로 이벤트에 응답

커스텀 컨트롤을 구현하는 경우, 다음과 같은 방법으로 UI 툴킷 이벤트에 응답할 수 있습니다.

이벤트에 대한 응답은 상황에 따라 다를 수 있습니다. 콜백과 가상 메서드 오버라이드의 차이는 다음과 같습니다.

  • 콜백은 클래스의 인스턴스에 등록해야 합니다. 가상 메서드는 클래스 자체를 수정해야 합니다.
  • 가상 메서드 오버라이드는 전파 단계 중 콜백 레지스트리 룩업이 필요하지 않으므로, 성능 측면에서 약간 유리합니다.

HandleEventBubbleUp 또는 HandleEventTrickleDown 가상 메서드 오버라이드

가상 메서드 오버라이드는 클래스의 모든 인스턴스에 적용됩니다. HandleEventBubbleUp 또는 HandleEventTrickleDown을 오버라이드하는 클래스의 경우 해당 인스턴스에 콜백을 등록할 수도 있습니다.

HandleEventBubbleUp 또는 HandleEventTrickleDown 메서드나 둘 모두를 오버라이드하려면 VisualElement의 새 서브 클래스를 파생합니다.

시각적 요소 서브 클래스의 각 인스턴스에서 이벤트를 수신하면 HandleEventBubbleUpHandleEventTrickleDown이 실행됩니다.

다음 예시는 이러한 가상 메서드를 커스터마이즈하는 방법을 보여 줍니다.

override void HandleEventBubbleUp(EventBase evt)
{
    // Call the base function.
    base.HandleEventBubbleUp(evt);

    if (evt.eventTypeId == PointerDownEvent.TypeId())
    {
        // ...
    }
    else if (evt.eventTypeId == MouseUpEvent.TypeId())
    {
        // ...
    }
    // More event types
}

특정 클래스 인스턴스에 대해 다음과 같은 경우 커스텀 코드를 실행하면 동일한 결과가 나타납니다.

  • BubbleUp 단계에 대해 설정된 콜백에서
  • HandleEventBubbleUp 메서드 오버라이드에서

두 경우 모두 이벤트 전파를 중지하면 현재 타겟 콜백 및 메서드 오버라이드를 실행한 후 이벤트에 대한 반응을 방지합니다.

베스트 프랙티스

다음은 커스텀 컨트롤을 사용하여 이벤트를 처리하는 베스트 프랙티스입니다.

동작 구현

일반적으로 요소에서 동작을 구현하려면 HandleEventBubbleUp 메서드 오버라이드를 사용합니다.

BubbleUp이 콜백의 기본 전파 단계이므로 코드 실행 타이밍 변경에 대한 걱정 없이 콜백의 모든 코드를 HandleEventBubbleUp 메서드로 옮길 수 있습니다.

동작을 메서드 오버라이드로 구현하는 경우 다음과 같은 이점이 있습니다.

  • 메서드 오버라이드는 콜백 레지스트리 룩업을 필요로 하지 않습니다.
  • 콜백이 없는 인스턴스는 전파 프로세스에 들어가지 않습니다.

이벤트 전파 중지

콜백 또는 가상 메서드 오버라이드 내에서 이벤트를 처리할 때 이벤트의 StopPropagation 메서드 중 하나를 호출하여 추가적인 이벤트 전파를 중지할 수 있습니다. 예를 들어, 부모 패널은 트리클다운 단계에서 전파를 중지하여 자식이 이벤트를 수신하지 못하도록 할 수 있습니다.

이벤트 클래스 자체 내에서 EventBase.PreDispatch()EventBase.PostDispatch() 메서드의 실행을 방지할 수는 없습니다.

다음 메서드는 이벤트 전파에 영향을 미칩니다.

  • StopImmediatePropagation(): 이벤트에 대한 후속 콜백이 실행되지 않도록 이벤트 전파 프로세스를 즉시 중지합니다.
  • StopPropagation(): 현재 요소의 마지막 콜백 이후 이벤트 전파 프로세스를 중지합니다. 이렇게 하면 모든 콜백이 현재 요소에서 실행되는 동시에 다른 요소가 이벤트에 응답하지 못하게 할 수 있습니다.

추가 리소스

요소의 포커스 순서
매니퓰레이터