icon안동민 개발노트

이벤트 시스템의 기초 이해


 이벤트 시스템은 블루프린트에서 게임 로직의 흐름을 제어하는 핵심 메커니즘입니다.

 이벤트를 통해 특정 상황이나 조건에 반응하여 코드를 실행할 수 있습니다.

주요 이벤트 유형

 1. BeginPlay

  • 설명 : 게임이 시작되거나 액터가 스폰될 때 호출
  • 용도 : 초기화 로직 실행

 2. Tick

  • 설명 : 매 프레임마다 호출
  • 용도 : 지속적인 업데이트가 필요한 로직 실행

 3. Custom Events

  • 설명 : 사용자가 정의한 이벤트
  • 용도 : 특정 상황에 대한 반응 로직 구현

 4. Input Events

  • 설명 : 키보드, 마우스, 터치 등의 입력에 반응
  • 용도 : 플레이어 상호작용 처리

 5. Collision Events

  • 설명 : 물체 간 충돌 시 호출
  • 용도 : 충돌 반응 로직 구현

이벤트 생성 및 사용

 1. BeginPlay 이벤트 사용

[Event BeginPlay] --> [초기화 로직]
                  --> [게임 시작 메시지 출력]

 2. Custom Event 생성

  • 'My Blueprint' 패널에서 '함수 추가' 버튼 클릭 후 'Custom Event' 선택
  • 이벤트 이름 지정 (예 : "OnPlayerScored")

 3. Input Event 설정

  • Project Settings > Input 에서 새 입력 매핑 추가
  • 블루프린트에서 입력 이벤트 추가
[InputAction Jump] --> [캐릭터 점프 함수 호출]

이벤트 바인딩

 다른 객체의 이벤트에 반응하기 위해 이벤트 바인딩을 사용합니다.

  1. 'Bind Event' 노드 사용
  2. 대상 객체와 이벤트 선택
  3. 바인딩할 함수 생성 또는 선택
[CreateWidget] --> [Bind Event To OnClicked] --> [Widget에 추가]

이벤트 트리거

 Custom Event를 수동으로 트리거하는 방법

  1. 그래프에서 우클릭하여 컨텍스트 메뉴 열기
  2. 이벤트 이름 검색 및 'Call' 버전 선택
  3. 필요한 경우 매개변수 설정
[특정 조건 충족] --> [Call OnPlayerScored]

이벤트 디스패처

 이벤트 디스패처는 한 블루프린트에서 다른 블루프린트로 이벤트를 전달하는 메커니즘입니다.

 1. 이벤트 디스패처 생성

  • 'My Blueprint' 패널에서 '변수 추가' 버튼 클릭 후 'Event Dispatcher' 선택
  • 이름 지정 (예 : "OnHealthChanged")

 2. 이벤트 디스패처 호출

[체력 변경 로직] --> [Call OnHealthChanged]

 3. 이벤트 디스패처에 바인딩

  • 다른 블루프린트에서 해당 디스패처에 함수 바인딩
[Bind Event to OnHealthChanged] --> [UI 업데이트 함수]

이벤트 기반 프로그래밍의 장단점

 장점

  1. 코드의 모듈화와 재사용성 향상
  2. 느슨한 결합으로 유지보수성 개선
  3. 비동기 프로그래밍 용이

 단점

  1. 복잡한 이벤트 체인 디버깅의 어려움
  2. 과도한 이벤트 사용 시 성능 저하 가능
  3. 이벤트 순서 관리의 복잡성

이벤트 사용 예제 : 플레이어 체력 시스템

  1. 체력 변경 이벤트 생성
Custom Event: OnHealthChanged
Parameters: NewHealth (Float), HealthDelta (Float)
  1. 데미지 처리 로직
[받은 데미지] --> [현재 체력 감소] --> [Call OnHealthChanged]
                                    --> [Check Death Condition]
  1. UI 업데이트
[Bind Event to OnHealthChanged] --> [Update Health Bar]
                                 --> [Play Damage Animation]
  1. 사운드 및 이펙트 트리거
[Bind Event to OnHealthChanged] --> [Branch: HealthDelta < 0?]
                                       |
                  [Play Hurt Sound] <-- [True]
                  [Spawn Damage Particles]

이벤트 시스템 최적화 팁

 1. Tick 이벤트 사용 최소화

  • 불필요한 매 프레임 업데이트 피하기
  • 대신 타이머나 필요 시에만 업데이트하는 로직 사용

 2. 이벤트 디스패처 활용

  • 복잡한 상호작용을 단순화하고 코드 재사용성 향상

 3. 조건부 이벤트 바인딩

  • 필요한 경우에만 이벤트 바인딩하고, 불필요 시 언바인딩

 4. 이벤트 배치 처리

  • 여러 개의 유사한 이벤트를 하나의 이벤트로 배치 처리

 5. 레벨 블루프린트 활용

  • 전역적인 이벤트 관리에 레벨 블루프린트 사용

고급 이벤트 기법

 1. 이벤트 큐 시스템

  • 복잡한 이벤트 시퀀스 관리를 위한 큐 구현

 2. 이벤트 필터링

  • 특정 조건을 만족하는 경우에만 이벤트 처리

 3. 멀티캐스트 델리게이트

  • 여러 함수를 하나의 이벤트에 바인딩

 4. 네트워크 복제 이벤트

  • 멀티플레이어 게임에서 서버-클라이언트 간 이벤트 동기화

 이벤트 시스템은 블루프린트에서 반응형 게임플레이 로직을 구현하는 강력한 도구입니다.

 적절히 사용하면 코드의 구조와 가독성을 크게 향상시킬 수 있지만, 과도한 사용은 복잡성을 증가시킬 수 있습니다.

 이벤트의 특성을 잘 이해하고, 게임의 요구사항에 맞게 균형있게 사용하는 것이 중요합니다.