본문 바로가기
::protected/언리얼4&5

액터(Actor)의 수명 주기.

by 해맑은욱 2019. 11. 19.

로드

이미 레벨에 있는 액터에 대해서, LoadMap 이 발생했을 때나 (스트리밍 또는 서브 레벨에서) AddToWorld 가 호출되었을 때 발생

1. 패키지/레벨에 있는 액터가 디스크에서 로드됩니다.

2. PostLoad : 디스크에서의 로드 완료 후 serialize 된 액터에 의해 호출됩니다. 커스텀 버전이나 픽스 작업은 이 곳에 와야 합니다. PostLoad 는 PostActorCreated 와 상호 배제됩니다.

3. InitializeActorsForPlay

4. RouteActorInitialize 초기화되지 않은 액터에 대해 호출됩니다 (심리스 트래블 전환 처리)

     PreInitializeComponents - 액터의 컴포넌트에 InitializeComponent 를 호출하기 전 호출합니다.

     InitializeComponent - 액터에 정의된 각 컴포넌트 생성용 헬퍼 함수입니다.

     PostInitializeComponents - 액터의 컴포넌트 초기화 완료 후 호출됩니다.

5. BeginPlay - 레벨이 시작되면 호출됩니다.

 

스폰

액터를 스폰(인스턴싱)할 때 따르게 되는 경로입니다.

1. SpawnActor이 호출됩니다.

2. PostSpawnInitialize가 호출됩니다.

3. PostActorCreated - 스폰된 액터의 생성 이후에 호출됩니다. 생성자같은 것이 여기에 와야 합니다. PostActorCreated는 PostLoad와 상호 배제적입니다.

4. ExecuteConstruction:

     OnConstruction - 액터의 생성 지점으로, 블루프린트 액터가 컴포넌트를 만들고 블루프린트 변수를 초기화시키는 곳입니다.

5. PostActorConstruction :

     PreInitializeComponents - 액터의 컴포넌트에서 InitializeComponent가 호출되기 전에 호출됩니다.

     InitializeComponent - 액터에 정의된 컴포넌트 각각의 생성을 돕는 함수입니다.

     PostInitializeComponents - 액터의 컴포넌트 초기화가 완료된 이후 호출됩니다.

6. OnActorSpawned 가 UWorld 에 Broadcast됩니다.

7. BeginPlay 가 호출됩니다.

 

디퍼드 스폰

"Expose on Spawn" 설정된 프로퍼티가 있으면 액터는 디퍼드(유예시켜 나중에 한 번에 몰아서) 스폰이 가능합니다.

1. SpawnActorDeferred - 액터의 절차적 생성을 뜻하는 것으로, 블루프린트 컨스트럭션 스크립트 이전 추가적인 구성이 가능합니다.

2. SpawnActor 안의 모든 것이 일어나지만, PostActorCreated (액터 생성 이후) 뒤에는 다음과 같은 일이 일어납니다:

     유효하지만 완료되지는 않은 액터 인스턴스로 다양한 "초기화 함수" 구성 / 호출을 합니다.

     FinishSpawningActor - 액터를 마무리시키기 위해 호출되며, SpawnActor (액터 스폰) 줄의 ExecuteConstruction (생성 실행)을 집어듭니다.

 

소멸

1. Destroy - 액터를 제거해야겠다 싶지만 게임플레이가 계속 진행중일 때 게임에서 수동으로 호출됩니다. 액터는 킬 대기 상태로 마킹되며, 레벨의 액터 배열에서 제거됩니다.

2. EndPlay - 액터의 수명이 막바지에 다다랐음을 보증하기 위해 여러 곳에서 호출됩니다. 플레이 도중에는 Destroy (소멸)이나, Level Transition (레벨 전환)이나, 액터가 들어있는 스트리밍 레벨이 언로드되면 이 함수가 발동됩니다. EndPlay 가 호출되는 경우는 다음과 같습니다:

     Destroy 명시적 호출

     에디터에서 플레이 종료

     Level Transition (심리스 트래블 또는 맵 로드)

     액터가 들어있는 스트리밍 레벨 언로드

     액터의 수명 만료

     어플리케이션 종료 (모든 액터 소멸)

 

어떻게 발생했는지와는 상관없이, 액터는 RF_PendingKill 마킹되어 다음 가비지 컬렉션 주기 동안 deallocate (할당 해제)됩니다. 또한 pending kill (킬 대기상태)를 수동 검사하기 보다는, 보다 깔끔한 FWeakObjectPtr<AActor> 사용을 추천합니다.

 

3. OnDestroy - Destory (소멸)에 대한 구식(legacy) 반응입니다. 여기 있는 것들은 Level Transition (레벨 전환)이나 기타 게임 정리용 함수에 호출되는 EndPlay (플레이 종료)에 옮기는 것이 좋을 것입니다.

'::protected > 언리얼4&5' 카테고리의 다른 글

InterpTo  (0) 2019.11.20
Player Controller & Pawn  (0) 2019.11.19
UE_LOG  (0) 2019.11.18
ConstructorHelpers & StaticLoadObject  (0) 2019.11.18
CreateDefaultObject & NewObject  (0) 2019.11.18