이벤트 디스패처 (Event Dispatchers)
안녕하세요, 블루프린트 통신의 마지막 방법인 **이벤트 디스패처(Event Dispatchers)**에 오신 것을 환영합니다. 이벤트 디스패처는 블루프린트 인터페이스와는 약간 다릅니다. 이는 주로 하나의 이벤트를 호출하여 여러 개의 다른 이벤트를 동시에 실행시키는 데 중점을 둡니다. 특히 레벨 블루프린트와 통신할 때 유용합니다.
1. 시나리오: 동전 수집 후 통(Barrel) 생성
목표: E 키를 누를 때마다 **동전(Coin)**을 획득하고, 동전이 10개 이상이 되면 이벤트 디스패처를 통해 레벨 블루프린트에 신호를 보내 **통(Barrel)**을 생성하게 합니다.
2. 필요한 블루프린트 클래스 준비

AI 활용 설정
사진 설명을 입력하세요.
- BP_Barrel (액터): 이전과 동일하게 Cylinder 컴포넌트를 가진 BP_Barrel 액터를 만듭니다. (생성 위치 테스트용)

AI 활용 설정
사진 설명을 입력하세요.
- PC_PlayerController (플레이어 컨트롤러):

AI 활용 설정
사진 설명을 입력하세요.
-
- 블루프린트 클래스를 생성하고 Player Controller를 부모 클래스로 선택합니다.
- 이름을 PC_PlayerController라고 지정합니다.
- 변수 생성: Coins라는 이름의 정수(Integer) 변수를 만듭니다. (기본값 0)

AI 활용 설정
사진 설명을 입력하세요.
- GM_GameMode (게임 모드):
- Game Mode Base 클래스로 GM_GameMode를 만들고, **월드 세팅(World Settings)**에서 Game Mode Override를 GM_GameMode로, Player Controller Class를 PC_PlayerController로 설정합니다.
3. 이벤트 디스패처 생성 및 코인 증가 로직
PC_PlayerController 블루프린트 내부에서 로직을 구현합니다.
- Event Dispatcher 생성:
- My Blueprint 패널의 Event Dispatchers 섹션 옆에 있는 + 버튼을 클릭합니다.
- 이름을 BarrelSpawner라고 지정합니다.
- 디스패처에 파라미터 추가:
- BarrelSpawner를 클릭하고 Details (디테일) 패널의 Inputs (입력) 섹션에서 + New Parameter를 클릭합니다.
- 새 입력 변수의 타입을 Integer로 설정하고 이름을 Coins로 지정합니다. (현재 코인 개수를 전달하기 위함)
- E 키 입력 및 로직 구현:
- E 키보드 이벤트 노드를 만듭니다.
- Coins 변수를 가져와 + (정수 덧셈) 노드를 사용하여 1을 더합니다.
- Set Coins 노드를 연결하여 Coins 변수를 업데이트합니다.
- Print String을 연결하여 현재 Coins 값을 화면에 출력합니다.
- 이벤트 디스패처 호출 (Call):
- Set Coins 노드 뒤에 BarrelSpawner 디스패처를 Call (호출) 노드로 연결합니다.
- 참고: 디스패처를 호출하려면 Call 노드를 사용합니다.
- Coins 변수의 현재 값을 BarrelSpawner의 Coins 입력 핀에 연결하여 전달합니다.
- 결과: E 키를 누를 때마다 Coins가 증가하고, BarrelSpawner 디스패처가 호출되며 현재 코인 개수를 전달합니다.

AI 활용 설정
사진 설명을 입력하세요.
4. 인터페이스를 통한 PlayerController 참조 (통신 준비)
레벨 블루프린트에서 디스패처를 사용하려면 PC_PlayerController에 대한 참조를 가져와야 합니다. 인터페이스를 사용해 캐스팅을 피합니다.

AI 활용 설정
사진 설명을 입력하세요.
- Int_PlayerController 인터페이스 생성:
- Interfaces 폴더에 Int_PlayerController 인터페이스를 만듭니다.
- SetPlayerControllerRef 함수를 만들고, 출력에 PC_PlayerController 타입의 Object Reference 변수(PlayerController)를 추가합니다.
- 인터페이스 연결:
- PC_PlayerController의 Class Settings에 Int_PlayerController를 추가합니다.
- SetPlayerControllerRef 함수를 열고 PlayerController 출력에 Self 노드를 연결합니다.
5. 레벨 블루프린트에서 이벤트 디스패처 바인딩 (Binding)
이제 레벨 블루프린트에서 디스패처에 이벤트를 연결합니다.
- Begin Play 이벤트 노드를 만듭니다.
- Player Controller 참조 가져오기:
- Get Player Controller 노드를 연결합니다.
- 인터페이스를 사용하여 Set Player Controller Ref (Message) 함수를 호출합니다.

AI 활용 설정
사진 설명을 입력하세요.
- 디스패처에 바인딩 (Bind):
- Set Player Controller Ref의 출력 핀 (Player Controller 참조)에서 드래그하여 Bind Event to BarrelSpawner를 검색하고 연결합니다.
- 바인딩은 디스패처가 호출될 때 실행될 이벤트를 연결하는 행위입니다.
- 커스텀 이벤트 생성:
- Bind Event to BarrelSpawner 노드의 Event 핀에서 드래그하여 Create Custom Event를 선택합니다.
- 이름을 SpawnBarrel이라고 지정합니다.
- 참고: 이 커스텀 이벤트는 디스패처의 Coins 파라미터를 입력으로 자동으로 받습니다.
- Spawn 로직 구현:
- SpawnBarrel 커스텀 이벤트의 Coins 입력 핀에서 로직을 시작합니다.
- Greater Equal (>=) 노드를 사용하여 10과 비교합니다.
- Branch 노드를 연결합니다.
- True일 경우: Spawn Actor from Class 노드를 연결하고 BP_Barrel을 생성합니다. (Spawn Transform 변수를 만들어 Z=15 등으로 설정)

AI 활용 설정
사진 설명을 입력하세요.
6. 최종 테스트 및 디스패처의 특징
- Play를 클릭합니다.
- E 키를 누릅니다. 오류! 파일 이름이 지정되어 있지 않습니다.코인 숫자가 증가하고 "FIRE" 메시지가 출력됩니다. (SpawnBarrel 이벤트가 계속 실행되고 있다는 의미)
- 코인이 10개가 되는 순간 오류! 파일 이름이 지정되어 있지 않습니다.Branch가 True가 되어 **술통(Barrel)**이 생성됩니다.
이벤트 디스패처의 특징 요약:
- 다중 실행: 디스패처를 **호출(Call)**하면, 해당 디스패처에 **바인딩(Bind)**된 모든 이벤트가 동시에 실행됩니다. (레벨 블루프린트 포함 여러 블루프린트에 연결 가능)
- 통신 방식: 한 액터가 "나 10개 다 모았어!"라고 외치면, **바인딩된 모든 청취자(Listener)**가 그 외침을 듣고 각자의 코드를 실행하는 방식입니다.
- 활용: HUD 업데이트, 사운드 재생, 레벨 변경 등 하나의 사건이 여러 곳에 영향을 미쳐야 할 때 매우 유용합니다.
'Unreal Engine' 카테고리의 다른 글
| Unreal Engine 간단한 스크롤 수집 게임 2 (0) | 2025.11.13 |
|---|---|
| Unreal Engine 간단한 스크롤 수집 게임 (0) | 2025.11.13 |
| Unreal Engine 블루프린트 통신 (Blueprint Communication) 소개 (0) | 2025.11.11 |
| Unreal Engine Get All Actors of Class (클래스의 모든 액터 가져오기) 노드 (0) | 2025.11.11 |
| Unreal Engine 액터 해즈 태그 (Actor Has Tag) 노드 설명 (0) | 2025.11.10 |