icon
2장 : 블루프린트 기본 요소

이벤트 시스템의 기초 이해


블루프린트를 사용하다 보면 이벤트(Event) 라는 단어를 자주 접하게 됩니다. 1장의 '첫 번째 블루프린트 생성 및 실행' 절에서 Event BeginPlay를 사용했던 것을 기억하시나요? 이벤트는 게임 내에서 특정 상황이나 조건이 발생했을 때 블루프린트 로직이 실행되도록 '트리거'하는 역할을 합니다. 즉, "무슨 일이 일어났을 때" 블루프린트가 "어떻게 반응할지"를 정의하는 시스템의 핵심입니다.

함수가 개발자가 원할 때 언제든 호출할 수 있는 '능동적인 작업'이라면, 이벤트는 특정 상황이 발생했을 때 시스템에 의해 '수동적으로 발생되는 알림'이라고 생각할 수 있습니다. 마치 여러분이 친구에게 전화를 거는 것이 함수 호출이라면, 친구가 여러분에게 전화를 거는 것은 이벤트가 발생하는 것에 비유할 수 있습니다.


이벤트란 무엇인가?

이벤트는 게임 월드에서 발생하는 다양한 '사건'을 감지하고, 그 사건에 반응하여 사전에 정의된 로직을 실행하도록 하는 메커니즘입니다. 게임은 실시간으로 수많은 사건이 발생하는 동적인 환경이며, 이러한 사건들에 유기적으로 반응해야만 생동감 있는 경험을 제공할 수 있습니다. 이벤트 시스템이 바로 이 역할을 수행합니다.

언리얼 엔진의 블루프린트에서 이벤트는 주로 이벤트 그래프(Event Graph) 에 배치되어 사용됩니다. 이벤트 노드는 다른 노드들과는 다르게 자체적으로 실행 흐름을 시작하는 진입점 역할을 합니다.


주요 이벤트 유형

언리얼 엔진에서 자주 사용되는 대표적인 이벤트 유형은 다음과 같습니다.

시작 이벤트 (Initial Events)

  • Event BeginPlay: 이 블루프린트가 게임 월드에 로드되고 게임이 시작될 때 단 한 번 실행됩니다. 보통 초기 설정이나 준비 작업을 수행할 때 사용됩니다.
  • Event ActorBeginOverlap: 이 블루프린트 액터가 다른 액터와 물리적으로 겹치기 시작할 때(충돌 범위 내로 들어왔을 때) 발생합니다. 예를 들어, 플레이어가 아이템 위에 올라섰을 때 아이템을 획득하는 로직에 활용됩니다.
  • Event ActorEndOverlap: 이 블루프린트 액터가 다른 액터와의 겹침이 끝났을 때(충돌 범위 밖으로 나갔을 때) 발생합니다.

틱 이벤트 (Tick Events)

  • Event Tick: 게임의 매 프레임마다(초당 수십 번) 반복적으로 실행됩니다. 오브젝트의 지속적인 움직임이나 상태 업데이트 등 시간이 지남에 따라 계속 변화해야 하는 로직에 사용됩니다. 하지만 너무 많은 Event Tick 사용은 성능에 부담을 줄 수 있으므로 주의해야 합니다.

입력 이벤트 (Input Events)

  • Event Keyboard Input (예: Left Mouse Button, E 키): 특정 키보드 키나 마우스 버튼이 눌리거나 떼어졌을 때 발생합니다. 플레이어의 조작을 처리할 때 주로 사용됩니다.
  • Event Action Input / Axis Input: 프로젝트 설정에서 정의된 '액션 매핑'이나 '축 매핑'에 따라 발생합니다. 예를 들어, '점프' 액션이 정의되어 있고 스페이스바에 매핑되어 있다면, 스페이스바를 누를 때 '점프 액션 이벤트'가 발생합니다.

커스텀 이벤트 (Custom Events)

  • 개발자가 직접 정의하고 명명하여, 필요한 시점에 다른 블루프린트나 자기 자신에게서 호출(Call)할 수 있는 이벤트입니다. 특정 복잡한 로직을 이벤트로 만들어 필요할 때 외부에서 트리거하고 싶을 때 유용합니다. 함수와 유사하게 입력 매개변수를 가질 수 있습니다.

이벤트 사용의 기초

이벤트 노드는 함수 노드와는 다르게, 일반적으로 좌측에 실행 핀이 없습니다. 이는 이벤트 자체가 실행의 시작점이기 때문입니다.

  • 이벤트 노드 추가

    블루프린트 에디터의 이벤트 그래프 빈 공간에서 마우스 오른쪽 버튼을 클릭합니다.

    검색창에 원하는 이벤트 이름(예: Event ActorBeginOverlap)을 입력하고 선택합니다.

  • 이벤트 연결
    • 이벤트 노드의 실행 핀(오른쪽)에서 선을 드래그하여 이벤트가 발생했을 때 실행될 첫 번째 로직 노드의 실행 핀에 연결합니다.
    • 예를 들어, Event BeginPlay 뒤에 Print String 노드를 연결하여 게임 시작 시 메시지를 출력하는 것처럼 말이죠.

예시: 충돌 시 메시지 출력

간단한 Event ActorBeginOverlap 예시를 통해 이벤트를 활용해 봅시다.

BP_WelcomeMessage 블루프린트 에디터를 엽니다.

좌측 컴포넌트 패널(Components Panel) 에서 + 추가(Add) 버튼을 클릭하고 Box Collision 컴포넌트를 추가합니다.

  • Box Collision은 보이지 않는 충돌 감지 영역을 제공합니다.

Box Collision을 선택한 상태에서 디테일 패널(Details Panel) 을 아래로 스크롤하면 Events 섹션이 보일 것입니다.

Events 섹션에서 On Component Begin Overlap 옆의 + 버튼을 클릭합니다.

  • 그러면 이벤트 그래프에 Event OnComponentBeginOverlap 노드가 자동으로 생성됩니다. 이 노드는 이 Box Collision 컴포넌트가 다른 무언가와 겹치기 시작할 때 발생합니다.

Event OnComponentBeginOverlap 노드의 실행 핀에서 선을 드래그하여 Print String 노드를 추가합니다.

Print String 노드의 In String 핀에 "누군가 겹쳤습니다!"라고 입력합니다.

블루프린트를 컴파일하고 저장합니다.

메인 에디터로 돌아와 BP_WelcomeMessage 액터를 월드에 배치합니다.

플레이(Play) 버튼을 눌러 게임을 시작한 후, 여러분의 플레이어 캐릭터가 BP_WelcomeMessage 액터 근처로 가서 충돌 범위(눈에 보이지 않는 박스) 안으로 들어가면, 화면에 "누군가 겹쳤습니다!"라는 메시지가 출력되는 것을 확인할 수 있습니다.

이처럼 이벤트는 게임 내 다양한 상황에 블루프린트가 반응하도록 만드는 핵심적인 매커니즘입니다.


이번 절에서는 블루프린트 이벤트 시스템의 기본적인 개념과 주요 이벤트 유형, 그리고 활용법에 대해 알아보았습니다. 함수와 이벤트는 블루프린트 로직을 구성하는 두 가지 큰 축이므로, 이들의 차이점과 사용 시점을 명확히 이해하는 것이 중요합니다.