Humility

아무리 노력해도 최고가 되지 못할 수 있다⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀그럼에도 노력하는자가 가장 겸손한 것 아닌가

공부하는 블로그

언리얼/기능구현

[Unreal5] 블루프린트로 달팽이 레이싱 게임 만들기 (Event Dispatcher)

새벽_글쓴이 2024. 11. 12. 20:24
반응형

저번에 만든 달팽이 레이싱 게임을 이벤트 디스패쳐를 활용해 더욱 간단하게 만들어 볼 예정이다.


Event Dispatcher(이벤트 디스패쳐)

이벤트 디스패처는 블루프린트 간의 통신을 위한 메시징 시스템

Observer 패턴을 구현한 것으로, 발신자(Publisher)와 수신자(Subscriber) 간의 느슨한 결합을 가능하게 한다

주요 특징

  • 1:N 통신 가능 (하나의 이벤트를 여러 객체가 수신 가능)
  • 런타임에 동적으로 바인딩/언바인딩 가능
  • 커스텀 매개변수 전달 가능

장점

느슨한 결합으로 모듈성 향상
확장성이 좋음
코드 재사용성 증가
디버깅이 용이

주의사항

메모리 누수 방지를 위해 적절한 Unbind 필요
과도한 이벤트 발생은 성능에 영향
순환 참조 주의

주요 사용법

이벤트 디스패쳐 생성 방법

1. 블루프린트 에디터에서 변수 추가
2. 변수 타입을 'Event Dispatcher' 선택
3. 필요한 매개변수 설정

기본 함수

Bind: 이벤트 리스너 등록
Unbind: 이벤트 리스너 제거
Broadcast: 이벤트 발생 알림
Clear: 모든 리스너 제거

실제 사용 예시

체력 시스템

Character 블루프린트
OnHealthChanged 디스패처 선언
TakeDamage 함수에서 체력 변경 시 Broadcast

UI 블루프린트
BeginPlay에서 OnHealthChanged에 바인딩
체력 변경 시 체력바 업데이트

 

퀘스트 시스템

Quest Manager
OnQuestCompleted 디스패처
OnQuestUpdated 디스패처

연결되는 시스템들
UI 업데이트 - 보상 지급
새로운 퀘스트 언락

고급 활용

매개변수를 포함한 이벤트

OnDamageTaken (데미지량, 데미지 타입)
OnItemAcquired (아이템 정보, 획득 수량)
OnScoreChanged (새로운 점수, 변경된 양)

 

조건부 바인딩

특정 조건에서만 이벤트를 수신
임시로 이벤트 수신을 비활성화

실제 사용 예시

게임 상태 관리

GameMode 블루프린트
OnGameStateChanged
로비
게임 시작
일시정지
게임 종료

수신자들
UI 업데이트
캐릭터 컨트롤 잠금/해제
배경 음악 변경
이벤트 디스패쳐를 잘 활용하면 깔끔하고 유지보수가 쉬운 시스템을 만들 수 있을 것 같다

이벤트 디스패쳐 만들기

Actor 블루프린트에서 Call 이벤트 호출


call on Arrived 함수란?

AI 내비게이션 시스템에서 사용되는 함수이다. 주로 Ai 캐릭터가 목적지에 도착했을 때 실행되는 콜백 함수이다

특징

AI가 Simple Move To Location이나 Move To Actor를 통해 이동한 후 지정된 목적지에 도착했을 때 자동으로 호출된다

 

 

주요 call 노드

액터/캐릭터 관련

Call On Arrived: 목적지 도착 시 호출
Call Animate: 애니메이션 실행
Call Function: 일반 함수 호출
Call Parent Function: 부모 함수 호출
Call in Editor: 에디터에서 함수 호출

 

타이머관련

Call Function After Delay: 딜레이 후 함수 호출
Call Function at Time: 특정 시간에 함수 호출
Clear and Call Timer: 타이머 초기화 후 새로 호출

 

UI / 위젯 관련

Call PreConstruct: 위젯 초기 구성
Call Tick: 위젯 Tick 이벤트
Call to Interface: 인터페이스 함수 호출

레벨 블루프린트 변경


Bind Event to On Arrived란?

AI 내비게이션의 도착 이벤트에 특정 함수나 이벤트를 바인딩 하는 기능

AI가 목적지에 도착했을 때 실행할 동작을 연결할 수 있다

 

주요 도착이벤트 노드

Event 노드

Event On Arrived: 도착 시점에 발생하는 이벤트
Receive Move Completed: 이동 완료 시 발생하는 이벤트

 

Call 노드

Call On Arrived: 도착 시점에 호출되는 함수
Call On Move Completed: 이동 완료 시 호출되는 함수

 

Bind 노드

Bind Event to On Arrived: 도착 시 실행할 이벤트 바인딩
Bind Event to Move Completed: 이동 완료 시 실행할 이벤트 바인딩

비교

Actor 클래스

Before


After

레벨 블루프린트

Before


After

결과

복잡한 노드가 깔끔한 구조로 변경되었고 이런식으로 제작시 추후 유지보수와 디버깅이 쉬워질 것 같았다

반응형