ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이벤트 디스패처
    언리얼 2022. 11. 7. 16:49

     

    이벤트 디스패처란,

    특정 이벤트에 구독/알림 설정을 해놓은 것과 유사한 기능을 수행한다.

    이는 특정 이벤트가 발생 시, 그 이벤트를 구독하고 있는 모든 요소에 알림을 보내는 기능을 수행한다는 것을 의미한다.

     

    디스패치(dispatch)라는 단어의 의미는 '(특별한 목적을 위해) 보내다' 라는 뜻을 갖는다.

    이를 미루어 보아 디스패처는 디스패처 이벤트를 'Call' 했을 때, 디스패처에 'Bind' 시킨 이벤트에 알림을 보내 

    바인딩 된 이벤트를 수행하도록 하는 의미를 갖게 되는 것이 아닌가.. 싶다..

     

     

    나는 이벤트 디스패처를 유니티의 델리게이트의 기능과 유사한 기능을 수행한다고 이해했다. 

    델리게이트와 다른 점은, 함수가 아닌 이벤트를 다루는 것이라는 점....?

     

    액터 생성 후, 이벤트 디스패처를 생성해준다. 

    그 뒤 블루프린트에 이벤트 디스패처를 드래그 앤 드롭하면 이벤트 디스패처 메뉴 목록이 보인다.

    여기서는 생성해 준 액터에 오버랩 될 때, 이벤트 디스패처를 호출해주었다. 

     

    이벤트 디스패처의 이벤트 메뉴와 할당 메뉴

    이벤트 디스패처를 블루프린트에 드래그 앤 드롭했을 때, 

    '이벤트' 메뉴는 해당 이벤트 디스패처에 바인딩 할 커스텀 이벤트를 생성하는 것으로 

    이벤트 디스패처에 바인딩 처리를 해주어야 한다. (그냥 커스텀 이벤트를 생성하는 것과 동일한 의미를 갖는 듯 하다..)

    '할당' 메뉴는 이벤트 디스패처에 바인딩할 커스텀 이벤트를 생성 및 바인딩을 처리해주는 것이다. 

     

    주로 Begin Play이벤트에서 이벤트 디스패처에 이벤트를 바인딩해준다.

    바인딩은 한 번만 수행해주면 이벤트 디스패처 호출 시, 자동으로 바인딩 된 이벤트들이

    호출되기 때문에 그런 듯 하다. 

    (유니티에서 델리게이트에 함수를 추가해줄 때, 역시 Start함수에서 수행해준다.)

     

     

    이벤트 디스패처가 있는 오브젝트(BP_BossDied)를 변수로 할당받은 뒤, 

    On Boss Died 이름의 이벤트 디스패처에 BossDied 이벤트를 바인딩 해준다. 

    그리고 BP_BossDoor의 블루프린트 내의 BossDied이벤트에서는 RotateCube라는 이벤트를 호출한다.

     

     

    이렇게 하면, BP_BossDied에서 콜리전에 오버랩 시,

    이벤트 디스패처에 바인딩 된 이벤트가 차례로 호출되는 것을 볼 수 있다. 

     

     

     

    아래의 튜토리얼을 보면서 이해하면 더 좋을 것 같다..

     

    https://docs.unrealengine.com/5.0/ko/event-dispatchers-and-delegates-quick-start-guide-in-unreal-engine/

     

    이벤트 디스패처 및 델리게이트 퀵스타트 가이드

    이벤트 디스패처 및 델리게이트 커뮤니케이션 메서드에 대한 퀵스타트 가이드입니다.

    docs.unrealengine.com

     

     

    + 2023-10-18

     

    함수로 이벤트를 생성해서 바인딩 시켜주는 방법도 있음.

    커스텀 이벤트를 바인딩 해주는 것과 차이점은, create event는 일회성이라는 점이다. 

     

    일회성의 의미는 unbind시 생성해준 event로 언바인드 시켜줄 수 없으며

    all Event를 언바인드 시켜주는 것으로 언바인딩을 수행할 수 있다. 

     

     

    바인딩된 함수는 디스패처 call 시점이 바인딩 시점보다 빠르더라도 

    모두 호출해주는 듯 하다.! 

     

    이에 대한 예시로

    post on log in이 발생할 때 아래 함수를 호출해준 경우,

    post on log in 함수는 다른 begin play 이벤트보다 앞서 호출되는 특징이 있다.

     

    하지만 begin play에서 해당 디스패처에 이벤트를 바인딩 해 주어도

    바인딩 된 이벤트를 제대로 수행하는 것을 확인할 수 있었다.

     

    사실 이부분에 대해서는 확인이 더 필요하다..

Designed by Tistory.