공식문서 참고

Actor 인스턴스를 스폰하게 되면,
UWorld::SpawnActor 로 월드에 스폰
이후 AActor::PostSpawnInitialize 가 호출
AActor::PostActorCreated는 생성 이후 스폰된 액터에 대해 호출되며, 모든 생성자 구현이 이 곳으로 이동한다. (PostLoad와 상호 배타적)
AActor::ExecuteConstruction 호출
AActor::OnConstruction 으로 액터 생성, 블루프린트 액터의 컴포넌트 생성 및 블루프린트 변수 초기화
AActor::PostActorConstruction
AActor::PreInitializeComponentsUActorComponent::InitializeComponent : 액터에 정의된 각 컴포넌트를 생성AActor::PostInitializeComponents : 액터 컴포넌트가 초기화된 후에 호출UWorld::OnActorSpawned가 UWorld에서 브로드캐스트
AActor::BeginPlay 호출
의 과정을 거치게 된다.
사실상, 개발 단계에서 가장 자주 사용해서 우리가 주목할 부분은
constructor,PostInitializeComponents,BeginPlay세 가지로 축약해볼 수 있다.
간단하게 보면,
액터 생성 시 호출되어, 가장 기본적으로 component에 대한 생성 및 초기화, 변수에 대한 초기화, 기본 설정 등의 작업을 한다.
모든 컴포넌트 초기화 후, BeginPlay 이전 시점으로,
컴포넌트 간 상호 작용 설정, 애니메이션 설정을 담당한다.
필자의 프로젝트로 따지면
void AMIRACharacter::PostInitializeComponents()
{
Super::PostInitializeComponents();
// initializing for anim montage
MIRAAnim = Cast<UMIRAAnimInstance>(GetMesh()->GetAnimInstance());
if (!MIRAAnim) return;
// binding logics to anim notify
MIRAAnim->OnSaveAttackCheck.AddLambda([this]() -> void {
SaveAttackCombo();
});
MIRAAnim->OnResetComboCheck.AddLambda([this]() -> void {
ResetAttackCombo();
});
MIRAAnim->OnAttackHitCheck.AddUObject(this, &AMIRACharacter::AttackCheck);
}
이렇게 초기화된 컴포넌트에 접근하여 처리한다.
월드에 등록이 된다는 것이 큰 부분으로, 안전하게 월드에 접근 할 수 있다.
따라서 게임 시작 관련 설정 중 월드에 대해 접근하여 다른 액터 참조 초기화 같은 부분을 담당한다.
UObject가 소멸로 표시된 후에 가비지 컬렉션을 통해 메모리에서 해당 오브젝트를 제거하여 사용 중인 리소스를 모두 해제시킨다.
UObject::BeginDestroy
UObject::IsReadyForFinishDestroy
UObject::FinishDestroy
언리얼 엔진에서 Game Instance 는 게임의 시작부터 종료까지 전체 수명 주기 동안 단 하나로 유지되는 객체이다.
놀랍게도, 공식 문서에서조차 정확히 자세히 다루고 있는 레퍼런스가 존재하지 않는다. 다만, 게임 인스턴스는 게임 데이터를 저장하는 공간으로서의 역할을 주로 하는 것 같다.
즉, 주요 역할은
등으로 사용된다.
Game Instance 는 게임 전체에서 접근 가능한 데이터에 대한 저장과 관리에 사용된다. 싱글톤처럼 존재하기 때문에 게임 내 어디서든 접근하여 데이터를 읽고 쓸 수 있다.
레벨이 변경될 때 파괴되지 않고 유지되므로, 레벨 간 데이터 공유에도 유용하게 사용할 수 있다.
공식문서의 게임 흐름 개요 에 따르면 게임 인스턴스는 공식적으로 게임 플레이가 시작되기 전, 먼저 게임 인스턴스를 Create한 후 Init을 진행하게 된다.
