이벤트 디스패처의 기본 사용법
이벤트 디스패처는 블루프린트 간에 느슨하게 결합된 통신을 가능하게 하는 강력한 메커니즘입니다.
이를 통해 한 블루프린트에서 이벤트를 발생시키고, 다른 블루프린트에서 이에 반응할 수 있습니다.
이벤트 디스패처의 개념
- 정의 : 이벤트 디스패처는 특정 상황이 발생했음을 여러 리스너에게 알리는 메커니즘입니다.
- 목적 : 블루프린트 간의 느슨한 결합을 구현하여 모듈성과 확장성을 향상시킵니다.
- 작동 방식 : 발신자(dispatcher)가 이벤트를 발생시키면, 이에 바인딩된 모든 수신자(listener)가 반응합니다.
이벤트 디스패처 생성 방법
- 블루프린트 에디터의 'My Blueprint' 패널에서 '추가' 버튼 클릭
- 'Event Dispatcher' 선택
- 이벤트 디스패처의 이름 지정 (예 : OnHealthChanged)
- 필요한 경우 매개변수 추가
느슨한 결합 구현
이벤트 디스패처를 사용하면 블루프린트 간의 직접적인 참조 없이 통신할 수 있습니다.
예제 : 체력 변경 시스템
이 예제에서 캐릭터 블루프린트는 UI나 게임 모드를 직접 참조하지 않고도 체력 변경 정보를 전달할 수 있습니다.
이벤트 바인딩과 언바인딩
바인딩 과정
- 이벤트를 수신할 블루프린트에서 바인딩 노드 생성
- 대상 액터(이벤트 발신자) 선택
- 바인딩할 이벤트 디스패처 선택
- 이벤트 발생 시 실행할 함수 연결
언바인딩 과정
- 'Unbind Event' 노드 사용
- 바인딩과 동일한 대상과 이벤트 디스패처 선택
이벤트 발생(Broadcast)
이벤트 발생은 이벤트 디스패처를 소유한 블루프린트에서 수행합니다.
방법
- 'Call' 노드 사용
- 필요한 경우 매개변수 값 설정
예 : 데미지 처리 후 체력 변경 이벤트 발생
효과적인 통신 패턴
1. 상태 변경 알림
- 중요한 상태 변화 시 이벤트 발생
- 예 : 플레이어 상태, 게임 단계 변경
2. 시스템 간 통신
- 직접적인 참조 없이 시스템 간 정보 교환
- 예 : 인벤토리 시스템과 UI 업데이트
3. 멀티캐스트 알림
- 여러 리스너에게 동시에 정보 전달
- 예 : 글로벌 게임 이벤트 알림
4. 조건부 실행
- 특정 조건 충족 시에만 이벤트 발생
주의해야 할 점
1. 성능 고려
- 과도한 이벤트 발생은 성능 저하 가능
- 필요한 경우에만 이벤트 발생 및 바인딩
2. 정리 (Cleanup)
- 불필요해진 바인딩은 반드시 언바인딩
- 특히 객체 파괴 시 주의
3. 순환 호출 방지
- 이벤트 핸들러 내에서 같은 이벤트 재발생 주의
4. 널 체크
- 이벤트 발생 전 발신자 유효성 확인
5. 디버깅
- 복잡한 이벤트 체인 추적을 위한 로깅 활용
예제 : 퀘스트 시스템
이 예제에서 퀘스트 매니저는 다양한 퀘스트 관련 이벤트를 발생시키고, UI와 게임 모드는 이에 반응합니다.
이를 통해 각 시스템은 독립적으로 작동하면서도 효과적으로 통신할 수 있습니다.
이벤트 디스패처는 블루프린트 간 통신을 유연하고 확장 가능하게 만드는 강력한 도구입니다.
직접 참조 없이도 복잡한 상호작용을 구현할 수 있어, 대규모 프로젝트에서 유용합니다.