본문 바로가기
언리얼 엔진/Game

이벤트 디스패처 이해하기

by z03y 2026. 1. 13.

언리얼 엔진에서 게임을 만들다 보면, 서로 다른 클래스들이 자연스럽게 상호작용해야 하는 순간을 자주 만나게 된다. 캐릭터가 아이템을 먹고, UI가 갱신되고, 특정 조건을 만족하면 또 다른 오브젝트에서 이벤트가 발생하는 구조같은 것들이다. 이런 상황에서 유용하게 쓰일 수 있는 것이 바로 이벤트 디스패처(Event Dispatcher)다.

 


 

이벤트 디스패처

이벤트 디스패처는 간단히 말해, 어떤 일이 발생했음을 외부에 알리는 방송 시스템이다. 특정 클래스가 '이벤트가 발생했다'고 신호를 보내면 그 신호에 반응해야 하는 다른 클래스들이 이를 받아서 각자 필요한 동작을 수행한다. A가 보내는 신호에 대해 B와 C가 각각의 동작을 수행하는 것이다. 중요한 점은 이벤트를 발생시키는 쪽은 누가 이 이벤트를 듣고 있는지 전혀 몰라도 된다는 것이다. 느슨한 연결 구조라고 부를 수도 있는 이 점이 바로 디스패처의 가장 큰 장점이다.

 

🍙 의존성 감소와 구조적인 안정성

만약 디스패처를 쓰지 않는다면 A가 B를 직접 참조하고 B가 C를 직접 호출하고 또 C가 D의 상태를 직접 변경하는 식의 구조가 만들어질 가능성이 크다. 이런 구조는 클래스 간 결합도가 높아지고 하나만 수정해도 연쇄적으로 고쳐야 하는 상황을 만든다. 반면 디스패처를 사용하면 '나는 A의 이벤트만 발생시킬 테니 나머지는 알아서 반응해'라는 구조를 만들 수 있다. 결과적으로 유지보수가 훨씬 쉬워진다.

 

🍙 프로젝트 소개

이 개념을 이해하기 위해 간단한 프로젝트를 하나 만들어보았다. 프로젝트에는 총 4개의 주요 클래스가 등장한다. 오니기리(아이템), 캐릭터(Pawn), HUD(아이템 획득 UI), 밥솥(조건 달성 시 추가 이벤트)이다. 맵에는 오니기리 3개가 배치되어 있고, 플레이어 캐릭터는 이 오니기리들과 순서에 상관없이 충돌(Collision overlaps)할 수 있다. 총 3개를 모두 먹으면 밥솥이 열리고 대왕 오니기리가 등장한다. 리셋버튼(H)를 누르면 초기 상태로 돌아간다.

 

🍙 오니기리 > 캐릭터

BP Onigiri

캐릭터가 오니기리와 오버랩되면 오니기리는 'Get Onigiri'라는 이벤트를 발생시킨다. 이 시점에서 오니기리는 단순히 자신의 역할만 수행한다. 디스패처를 통해 'Get Onigiri' 이벤트를 브로드캐스트하고 액터는 소멸한다.

 

🍙 캐릭터 > Reset 오니기리 / HUD / 밥솥

BP Character

'Get Onigiri' 이벤트를 구독하고 있는 쪽은 캐릭터(Pawn)이다. 이 예제에서는 캐릭터가 이벤트 허브 역할을 한다. 오니기리를 먹는 행위의 주체는 캐릭터이고 게임은 플레이어 행동을 중심으로 정의되기 때문이다. 오니기리는 'Get Onigiri' 사실만 알리고 이후의 먹은 갯수 갱신, 밥솥 이벤트 발생등은 캐릭터가 책임지고 판단한다.

BP_HUD
BP Character

캐릭터가 오니기리와 오버랩되면 HUD에서 획득 개수가 업데이트되고, 총 3개의 오니기리를 모두 획득하면 밥솥이 열린다.  'Get Onigiri' 정보를 가지고 캐릭터에서 3개의 다른 클래스의 상태를 각각 다르게 변경하는 것이다. 

 

🍙 Reset 오니기리

디스패처를 좀 더 활용해보고자 Reset(다시 시작)기능도 추가해보았다. 리셋 기능의 시작은 캐릭터에서 'Reset Onigiri', 'Update Onigiri' 디스패처를 Call한다. 오니기리를 먹을 때 썻던 'Update Onigiri' 디스패처의 경우 여기서 또 재활용해 개수를 0으로 하여 HUD에 업데이트한다.

BP Reset

'Reset Onigiri'의 경우 실제로 수신하는 쪽은 오니기리 BP가 아닌 별도의 Reset BP에서 첫 플레이 시 월드 상에 배치된 모든 오니기리의 위치를 배열로 저장하도록 하고 'Reset Onigiri'가 Call되면 처음 저장한 위치에 오니기리를 다시 Spawn한다. 오니기리는 한번 먹으면 사라지는 1회성 객체이기 때문이다. 밥솥 BP도 'Reset Onigiri' 신호를 받으면 초기 상태로 돌아가도록 한다. 

 



처음 VR 게임 개발을 하면서 디스패처의 개념을 이해하지 못해 직접 캐스팅, 직접 참조 방식으로 꾸역꾸역 프로젝트를 완성했던 기억이 난다. 개념을 이해하고 만들 시간도 여유도 없었기 때문에 일단 완성했긴 했지만 만들면서도 굉장히 비효율적이다라는 생각이 들었다. 이후 간단하게 디스패처를 적용한 이 프로젝트를 만들어보면서 이벤트 흐름에 대한 이해에 도움이 되었다. 

 

 

 

 

🍙 모델링 정보

https://sketchfab.com/3d-models/rice-cooker-2746fed9d156417ca043f45d37e65734
https://sketchfab.com/3d-models/onigiri-bf7a5fc75e0b404a91bdb4c145845c6c

반응형