[UE5] 언리얼 엔진 입문

[언리얼 입문] 3 - 언리얼의 실행 흐름과 이벤트 구조

지망셍 2025. 6. 2. 19:58

게임은 시간 속에서 동작하는 시스템이다.

언리얼에서는 그 흐름을 구성하는 BeginPlay, Tick, 이벤트, 입력 처리 구조가 핵심이다.

이번 글에서는 언리얼에서 오브젝트가 어떻게 동작을 시작하고,

어떤 식으로 플레이어 입력이나 충돌, 인터랙션에 반응하는지를 정리한다.


1. 언리얼의 실행 사이클

언리얼의 한 프레임은 대략 다음 순서로 진행된다:

  1. BeginPlay →
  2. Tick →
  3. 물리 업데이트, 애니메이션 →
  4. 렌더링 →
  5. 다음 프레임

2. BeginPlay와 Tick

BeginPlay

  • Actor가 처음 활성화될 때 1회 실행
  • 초기화, 리소스 로딩, 변수 세팅 등에 사용
void AMyActor::BeginPlay()
{
    Super::BeginPlay();
    UE_LOG(LogTemp, Log, TEXT("Hello Unreal!"));
}

Tick

  • 매 프레임마다 호출되는 함수
  • 매끄러운 움직임, 지속적인 체크 등에 사용
void AMyActor::Tick(float DeltaTime)
{
    Super::Tick(DeltaTime);
    AddActorWorldOffset(FVector(0, 0, 1));
}

Tick은 퍼포먼스에 영향을 주므로, 꼭 필요한 경우에만 켜자 (PrimaryActorTick.bCanEverTick = true)


3. 이벤트: 충돌, 오버랩, 인터랙션

언리얼은 다양한 이벤트를 통해 오브젝트 간 상호작용을 처리한다.

  • OnComponentBeginOverlap
  • OnActorHit
  • OnDestroyed
  • OnClicked, OnReleased
UFUNCTION()
void OnOverlapBegin(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, ...)

에디터 블루프린트에서도 해당 이벤트를 바인딩하여 사용 가능


4. 입력 처리: EnhancedInput 기초

언리얼 5부터는 Enhanced Input System이 기본이다.

  • Input Mapping Context에 Action 등록
  • PlayerController 또는 Pawn에서 바인딩
// InputAction 생성 → 프로젝트 설정에서 Context 등록
PlayerInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AMyCharacter::Move);

기존의 BindAxis, BindAction 구조보다 더 유연하고 멀티 디바이스 대응이 쉬움


5. 블루프린트에서 실행 흐름 보기

  • Event BeginPlay, Event Tick으로 흐름 제어
  • Event OnActorBeginOverlap, Event OnClicked 등 이벤트 처리 노드
  • Print String, Delay, Branch 등 기본 흐름 제어 블록을 통해 실험 가능

6. 실전 예제: 문 열기

  1. 액터에 Box Collision 추가
  2. OnComponentBeginOverlap → Timeline으로 회전
  3. Lerp와 SetActorRotation을 통해 열리는 동작 구현

마무리하며

언리얼은 실행 흐름을 구성하는 다양한 이벤트 중심 구조를 가지고 있다.

이를 잘 이해하면, 단순한 조작부터 복잡한 상호작용까지 설계할 수 있다.

다음 편에서는 이 흐름을 어떻게 시각적으로 구성하고, 왜 언리얼이 이런 구조를 C++과 Blueprint로 동시에 지원하는지 알아본다.