디스크에서 로드
이미 레벨에 있는 액터에 대해서, LoadMap 이 발생했을 때나 (스트리밍 또는 서브 레벨에서) AddToWorld 가 호출되었을 때 발생합니다.
- 패키지/레벨에 있는 액터가 디스크에서 로드됩니다.
- PostLoad : 디스크에서의 로드 완료 후 serialize 된 액터에 의해 호출됩니다. 커스텀 버전이나 픽스 작업은 이 곳에 와야 합니다. PostLoad 는 PostActorCreated 와 상호 배제됩니다.
- InitializeActorsForPlay
- RouteActorInitialize 초기화되지 않은 액터에 대해 호출됩니다 (심리스 트래블 전환 처리)
- PreInitializeComponents - 액터의 컴포넌트에 InitializeComponent 를 호출하기 전 호출합니다.
- InitializeComponent - 액터에 정의된 각 컴포넌트 생성용 헬퍼 함수입니다.
- PostInitializeComponents - 액터의 컴포넌트 초기화 완료 후 호출됩니다.
- BeginPlay - 레벨이 시작되면 호출됩니다.
스폰
액터를 스폰(인스턴싱)할 때 따르게 되는 경로입니다.
- SpawnActor이 호출됩니다.
- PostSpawnInitialize가 호출됩니다.
- PostActorCreated - 스폰된 액터의 생성 이후에 호출됩니다. 생성자같은 것이 여기에 와야 합니다. PostActorCreated는 PostLoad와 상호 배제적입니다.
- ExecuteConstruction:
- OnConstruction - 액터의 생성 지점으로, 블루프린트 액터가 컴포넌트를 만들고 블루프린트 변수를 초기화시키는 곳입니다.
- PostActorConstruction :
- PreInitializeComponents 액터의 컴포넌트에서 InitializeComponent가 호출되기 전에 호출됩니다.
- InitializeComponent 액터에 정의된 컴포넌트 각각의 생성을 돕는 함수입니다.
- PostInitializeComponents 액터의 컴포넌트 초기화가 완료된 이후 호출됩니다.
- OnActorSpawned 가 UWorld 에 Broadcast됩니다.
- BeginPlay 가 호출됩니다.
디퍼드 스폰
"Expose on Spawn" 설정된 프로퍼티가 있으면 액터는 디퍼드(유예시켜 나중에 한 번에 몰아서) 스폰이 가능합니다.
- SpawnActorDeferred - 액터의 절차적 생성을 뜻하는 것으로, 블루프린트 컨스트럭션 스크립트 이전 추가적인 구성이 가능합니다.
- 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 (플레이 종료)에 옮기는 것이 좋을 것입니다.
'게임 개발 > Unreal Engine' 카테고리의 다른 글
[Unreal Engine] 라이팅(Lighting) (30) | 2021.12.31 |
---|---|
[Unreal Engine] 라이팅(Lighting) (24) | 2021.12.30 |
[Unreal Engine] FName, FText, FString 비교 (0) | 2021.12.29 |
[Unreal Engine] Actor, Pawn, Character 비교 (0) | 2021.12.28 |
[Unreal Engine] FVector API (0) | 2021.12.28 |