이벤트 시스템의 기초 이해
블루프린트를 사용하다 보면 이벤트(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
액터 근처로 가서 충돌 범위(눈에 보이지 않는 박스) 안으로 들어가면, 화면에 "누군가 겹쳤습니다!"라는 메시지가 출력되는 것을 확인할 수 있습니다.
이처럼 이벤트는 게임 내 다양한 상황에 블루프린트가 반응하도록 만드는 핵심적인 매커니즘입니다.
이번 절에서는 블루프린트 이벤트 시스템의 기본적인 개념과 주요 이벤트 유형, 그리고 활용법에 대해 알아보았습니다. 함수와 이벤트는 블루프린트 로직을 구성하는 두 가지 큰 축이므로, 이들의 차이점과 사용 시점을 명확히 이해하는 것이 중요합니다.