본문 바로가기
UE5

[UE5] 유니티 개발자를 위한 언리얼 액터 생명주기 완벽 가이드

by smilemugi 2025. 12. 26.

안녕하세요! 오늘은 유니티의 Awake와 Start 함수가 언리얼 엔진 C++에서는 어떤 함수와 대응되는지, 그리고 언리얼만의 독특한 호출 순서는 어떻게 되는지 알아보겠습니다.

1. 한눈에 보는 실행 순서 비교

유니티와 언리얼은 컴포넌트를 초기화하고 게임을 시작하는 방식이 비슷하면서도 다릅니다. 아래 표를 보시면 감이 오실 거예요.

실행 순서 유니티 (Unity) 언리얼 엔진 (UE) 주요 역할
1단계 (없음) Constructor (생성자) 컴포넌트 생성, 에디터 기본값 설정
2단계 Awake PostInitializeComponents 모든 컴포넌트 조립 완료, 내부 참조 연결
3단계 Start BeginPlay 게임 월드 입장, 본격적인 플레이 로직 시작

2. 단계별 상세 설명

① Constructor (생성자): "설계도 작성"

언리얼 C++ 클래스의 생성자는 유니티에는 없는 단계입니다. 게임 실행 중이 아니라 에디터 로딩 시점부터 작동합니다.

  • 하는 일: CreateDefaultSubobject를 이용한 컴포넌트 생성, 변수 기본값 설정.
  • 주의: 아직 게임 월드가 생성되기 전이므로 GetWorld() 같은 함수를 쓰면 에러가 날 수 있습니다.

② PostInitializeComponents: "언리얼의 Awake"

유니티의 Awake와 가장 유사한 지점입니다.

  • 시점: 모든 컴포넌트가 등록(Register)되고 조립이 끝난 직후입니다.
  • 하는 일: "나 자신" 내부에 있는 컴포넌트들끼리 서로 참조를 주고받거나 초기화할 때 사용합니다.
  • 특징: 아직 다른 액터들이 BeginPlay를 호출하기 전이므로 안전하게 자신의 상태를 준비할 수 있습니다.

③ BeginPlay: "언리얼의 Start"

게임이 시작되거나 액터가 월드에 스폰된 첫 번째 프레임에 호출됩니다. 유니티의 Start와 거의 똑같습니다.

  • 하는 일: 다른 액터 찾기, 타이머 시작, UI 생성, 물리 효과 적용 등.
  • 중요: 반드시 Super::BeginPlay()를 호출해야 합니다!

3. [핵심] C++ vs 블루프린트, 누가 더 빠를까?

언리얼은 C++ 클래스를 상속받아 블루프린트를 만드는 구조입니다. 이때 BeginPlay의 실행 순서는 C++ 코드 내 Super::BeginPlay()의 위치에 결정됩니다.

C++
 
void AMyActor::BeginPlay()
{
    // [1] 여기에 쓰면 블루프린트보다 "먼저" 실행 (유니티의 Awake 느낌)
    UE_LOG(LogTemp, Warning, TEXT("C++ First!"));

    Super::BeginPlay(); // <--- 이 함수가 블루프린트의 'Event BeginPlay'를 실행함!

    // [2] 여기에 쓰면 블루프린트보다 "나중에" 실행
    UE_LOG(LogTemp, Warning, TEXT("C++ Last!"));
}
  • C++을 먼저 실행하고 싶다면? Super::BeginPlay() 윗줄에 코드를 작성하세요.
  • 블루프린트 이벤트를 아예 막고 싶다면? (권장하지 않지만) Super 호출을 생략하면 블루프린트의 BeginPlay 노드는 작동하지 않습니다.

4. 결론: 요약 가이드

유니티에서 하던 습관을 언리얼에 적용하는 팁입니다.

  1. 변수 초기화/컴포넌트 생성: Constructor (생성자)
  2. 내부 컴포넌트 끼리의 참조 세팅: PostInitializeComponents (Awake 대용)
  3. 월드의 다른 액터와 상호작용: BeginPlay (Start 대용)
  4. C++과 블루프린트 연동: 무조건 Super::BeginPlay()를 호출하되, 로직의 우선순위에 따라 위/아래를 결정할 것!

'UE5' 카테고리의 다른 글

GameInstance - 레벨이 바뀌어도 죽지 않는 불멸의 객체  (0) 2025.12.26