[UE5] 언리얼 엔진 입문
[언리얼 입문] 3 - 언리얼의 실행 흐름과 이벤트 구조
지망셍
2025. 6. 2. 19:58
게임은 시간 속에서 동작하는 시스템이다.
언리얼에서는 그 흐름을 구성하는 BeginPlay, Tick, 이벤트, 입력 처리 구조가 핵심이다.
이번 글에서는 언리얼에서 오브젝트가 어떻게 동작을 시작하고,
어떤 식으로 플레이어 입력이나 충돌, 인터랙션에 반응하는지를 정리한다.
1. 언리얼의 실행 사이클
언리얼의 한 프레임은 대략 다음 순서로 진행된다:
- BeginPlay →
- Tick →
- 물리 업데이트, 애니메이션 →
- 렌더링 →
- 다음 프레임
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. 실전 예제: 문 열기
- 액터에 Box Collision 추가
- OnComponentBeginOverlap → Timeline으로 회전
- Lerp와 SetActorRotation을 통해 열리는 동작 구현
마무리하며
언리얼은 실행 흐름을 구성하는 다양한 이벤트 중심 구조를 가지고 있다.
이를 잘 이해하면, 단순한 조작부터 복잡한 상호작용까지 설계할 수 있다.
다음 편에서는 이 흐름을 어떻게 시각적으로 구성하고, 왜 언리얼이 이런 구조를 C++과 Blueprint로 동시에 지원하는지 알아본다.