본문 바로가기
Unreal Engine

Unreal Engine 이벤트 디스패처 (Event Dispatchers)

by hfgraphic 2025. 11. 12.
반응형

 

이벤트 디스패처 (Event Dispatchers)

안녕하세요, 블루프린트 통신의 마지막 방법인 **이벤트 디스패처(Event Dispatchers)**에 오신 것을 환영합니다. 이벤트 디스패처는 블루프린트 인터페이스와는 약간 다릅니다. 이는 주로 하나의 이벤트를 호출하여 여러 개의 다른 이벤트동시에 실행시키는 데 중점을 둡니다. 특히 레벨 블루프린트와 통신할 때 유용합니다.


1. 시나리오: 동전 수집 후 통(Barrel) 생성

목표: E 키를 누를 때마다 **동전(Coin)**을 획득하고, 동전이 10개 이상이 되면 이벤트 디스패처를 통해 레벨 블루프린트에 신호를 보내 **통(Barrel)**을 생성하게 합니다.

 

2. 필요한 블루프린트 클래스 준비

대표사진 삭제

AI 활용 설정

사진 설명을 입력하세요.

  1. BP_Barrel (액터): 이전과 동일하게 Cylinder 컴포넌트를 가진 BP_Barrel 액터를 만듭니다. (생성 위치 테스트용)
대표사진 삭제

AI 활용 설정

사진 설명을 입력하세요.

  1. PC_PlayerController (플레이어 컨트롤러):
대표사진 삭제

AI 활용 설정

사진 설명을 입력하세요.

    • 블루프린트 클래스를 생성하고 Player Controller를 부모 클래스로 선택합니다.
    • 이름을 PC_PlayerController라고 지정합니다.
    • 변수 생성: Coins라는 이름의 정수(Integer) 변수를 만듭니다. (기본값 0)
대표사진 삭제

AI 활용 설정

사진 설명을 입력하세요.

  1. GM_GameMode (게임 모드):
    • Game Mode Base 클래스로 GM_GameMode를 만들고, **월드 세팅(World Settings)**에서 Game Mode OverrideGM_GameMode로, Player Controller ClassPC_PlayerController로 설정합니다.

 

3. 이벤트 디스패처 생성 및 코인 증가 로직

PC_PlayerController 블루프린트 내부에서 로직을 구현합니다.

  1. Event Dispatcher 생성:
    • My Blueprint 패널의 Event Dispatchers 섹션 옆에 있는 + 버튼을 클릭합니다.
    • 이름을 BarrelSpawner라고 지정합니다.
  2. 디스패처에 파라미터 추가:
    • BarrelSpawner를 클릭하고 Details (디테일) 패널의 Inputs (입력) 섹션에서 + New Parameter를 클릭합니다.
    • 새 입력 변수의 타입을 Integer로 설정하고 이름을 Coins로 지정합니다. (현재 코인 개수를 전달하기 위함)
  3. E 키 입력 및 로직 구현:
    • E 키보드 이벤트 노드를 만듭니다.
    • Coins 변수를 가져와 + (정수 덧셈) 노드를 사용하여 1을 더합니다.
    • Set Coins 노드를 연결하여 Coins 변수를 업데이트합니다.
    • Print String을 연결하여 현재 Coins 값을 화면에 출력합니다.
  4. 이벤트 디스패처 호출 (Call):
    • Set Coins 노드 뒤에 BarrelSpawner 디스패처를 Call (호출) 노드로 연결합니다.
    • 참고: 디스패처를 호출하려면 Call 노드를 사용합니다.
    • Coins 변수의 현재 값BarrelSpawnerCoins 입력 핀에 연결하여 전달합니다.
    • 결과: E 키를 누를 때마다 Coins가 증가하고, BarrelSpawner 디스패처가 호출되며 현재 코인 개수를 전달합니다.
대표사진 삭제

AI 활용 설정

사진 설명을 입력하세요.

 

4. 인터페이스를 통한 PlayerController 참조 (통신 준비)

레벨 블루프린트에서 디스패처를 사용하려면 PC_PlayerController에 대한 참조를 가져와야 합니다. 인터페이스를 사용해 캐스팅을 피합니다.

대표사진 삭제

AI 활용 설정

사진 설명을 입력하세요.

  1. Int_PlayerController 인터페이스 생성:
    • Interfaces 폴더에 Int_PlayerController 인터페이스를 만듭니다.
    • SetPlayerControllerRef 함수를 만들고, 출력PC_PlayerController 타입의 Object Reference 변수(PlayerController)를 추가합니다.
  2. 인터페이스 연결:
    • PC_PlayerControllerClass SettingsInt_PlayerController를 추가합니다.
    • SetPlayerControllerRef 함수를 열고 PlayerController 출력에 Self 노드를 연결합니다.

 

5. 레벨 블루프린트에서 이벤트 디스패처 바인딩 (Binding)

이제 레벨 블루프린트에서 디스패처에 이벤트를 연결합니다.

  1. Begin Play 이벤트 노드를 만듭니다.
  2. Player Controller 참조 가져오기:
    • Get Player Controller 노드를 연결합니다.
    • 인터페이스를 사용하여 Set Player Controller Ref (Message) 함수를 호출합니다.
대표사진 삭제

AI 활용 설정

사진 설명을 입력하세요.

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

AI 활용 설정

사진 설명을 입력하세요.

 

6. 최종 테스트 및 디스패처의 특징

  1. Play를 클릭합니다.
  2. E 키를 누릅니다. 오류! 파일 이름이 지정되어 있지 않습니다.코인 숫자가 증가하고 "FIRE" 메시지가 출력됩니다. (SpawnBarrel 이벤트가 계속 실행되고 있다는 의미)
  3. 코인이 10개가 되는 순간 오류! 파일 이름이 지정되어 있지 않습니다.Branch가 True가 되어 **술통(Barrel)**이 생성됩니다.

 

이벤트 디스패처의 특징 요약:

  • 다중 실행: 디스패처를 **호출(Call)**하면, 해당 디스패처에 **바인딩(Bind)**된 모든 이벤트가 동시에 실행됩니다. (레벨 블루프린트 포함 여러 블루프린트에 연결 가능)
  • 통신 방식: 한 액터가 "나 10개 다 모았어!"라고 외치면, **바인딩된 모든 청취자(Listener)**가 그 외침을 듣고 각자의 코드를 실행하는 방식입니다.
  • 활용: HUD 업데이트, 사운드 재생, 레벨 변경 등 하나의 사건여러 곳에 영향을 미쳐야 할 때 매우 유용합니다.

 

 

반응형