🎮Unreal4/Basic

[UE4] 이벤트 디스패처(Event Dispatcher), 리플렉션(Reflection)

공대 컴린이 2023. 1. 27. 01:45
728x90

🚀 이벤트 디스패처 (Event Dispatcher)

플레이어의 상태를 관리하는 Player State 컴포넌트를 만들던 도중, 플레이어의 상태가 변화되었을 때 해당 상태에 맞는 함수들을 일괄적으로 호출하기 위해 이벤트 디스패처라는 기능을 사용하였다.

 

Player State Component - 이벤트 디스패처

이벤트 디스패처에 하나 이상의 이벤트(함수)를 바인딩하면, 이벤트 디스패처 호출 시 등록된 모든 이벤트가 발동되도록 사용할 수 있다. 이러한 이벤트는 블루프린트 클래스 안에서 바인딩해도 되지만, 이벤트 디스패처를 통해 레벨 블루프린트 안에서 발동되도록 할 수도 있다.

이벤트 디스패처 함수 불러오기

이벤트 디스패처를 만들고 노드를 배치하면 위와 같이 호출, 바인드, 언바인드, 모두 언바인드가 뜬다. 

  • 호출: 이벤트 디스패처를 호출하여 등록된 이벤트들을 불러오기
  • 바인드(Bind): 디스패처 목록에서 이벤트를 추가
  • 언바인드(Unbind): 디스패처 목록에서 이벤트를 제거
  • 모두 언바인드(Unbind All Events): 디스패처 목록에 바인딩된 모든 이벤트를 언바인딩(제거)

또한 디스패처 함수를 만들때 "OnBeginChange"라고 만들면 상태가 바뀌기 전에 디스패처를 먼저 호출하는 것이고, "OnChanging"이면 바뀌는 중에 호출하는 것이고 "OnChanged"이면 바뀌고 난 후 호출하는 등의 규칙을 정한 뒤 알맞은 함수명을 설정하면 좋다.

예시

플레이어 BP에서 이벤트 디스패처 사용해보기

플레이어 BP에서 BeginPlay 함수가 시작되면 State 컴포넌트에 만들어둔 이벤트 디스패처에 Test 커스텀 이벤트를 바인딩하여 추가한다.

그 뒤로 스페이스바를 눌러 Jumping 액션을 실행시키고, 이벤트 디스패처의 발동 조건인 Type이 변환되는 Change Type 함수를 실행시키면 플레이어가 점프했을 때 디스패처가 실행되어 Hello가 프린트되는 결과를 볼 수 있다.

🚀 리플렉션 (Reflection, 언리얼 프로퍼티 시스템)

리플렉션은 프로그램이 실행시간에 자기 자신을 조사하는 기능이다. 이 기능은 엄청나게 유용해서 언리얼 엔진의 다수 시스템에 탑재되었다. 그러나 C++은 어떠한 형태의 리플렉션도 지원하지 않아 언리얼에서는 자체적으로 C++ 클래스, 구조체, 함수, 멤버변수, 열거형 관련 정보를 수집하고 질의하고 조작하는 별도의 시스템을 구축되어있다. 

 

리플렉션을 사용하는 예시로는 다음이 있다.

기존 C언어나 C++언어에서 enum 변수를 선언( enum { APPLE, BANANA } )하면 enum값은 상수로만 사용이 가능하여 APPLE과 BANANA라는 변수명을 쓰고싶어도 0, 1의 상수값만 사용이 가능했다.

그러나 언리얼엔진에서는 해당 enum값의 변수명을 가져와 "APPLE"과 "BANANA"를 사용할 수 있다!


참조

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/UserGuide/EventDispatcher/

 

이벤트 디스패처

블루프린트 클래스가 자신의 상태를 레벨 블루프린트에 보고할 수 있습니다.

docs.unrealengine.com

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Blueprints/UserGuide/EventDispatcher/BindingAndUnbinding/

 

이벤트 바인딩 및 언바인딩

이벤트 디스패처의 이벤트 목록에 이벤트를 추가하거나 제거하기 입니다.

docs.unrealengine.com

https://www.unrealengine.com/ko/blog/unreal-property-system-reflection

 

언리얼 프로퍼티 시스템 (리플렉션)

리플렉션(Reflection)은 프로그램이 실행시간에 자기 자신을 조사하는 기능입니다. 이는 엄청나게 유용한 데다 언리얼 엔진 테크놀로지의 근간을 이루는 것으로, 에디터의 디테일 패널, 시리얼라

www.unrealengine.com

 

728x90