E4-Unreal / test-simple-game-framework

simpleFramework for UE 5.1.0
MIT License
0 stars 1 forks source link

CDO를 제외한 모든 인스턴스에서 초기화 실행하는 법 #39

Open Eu4ng opened 1 year ago

Eu4ng commented 1 year ago

40

UObject에서 아래 기능이 필요하다. Actor에서는 PostRegisterAllComponents가 해당한다.

Function CDO On Level Load? On Place In Level On Spawn
- N Y Y Y

혹은 CDO인지 확인 후 예외처리 하는 방법 고려중이다

if(this == this->GetClass()->GetDefaultObject())
{
    // Do only in instances
}
Eu4ng commented 1 year ago

언리얼에서는 기본적으로 CDO를 생성한 뒤, 이를 복제하는 방식을 통해 새로운 인스턴스를 생성한다.

데이터 애셋을 멤버 변수로 가지고 있고, 이를 통해 각각의 인스턴스를 초기화해주는 경우를 생각해보자.

데이터 애셋에 저장되어 있는 실제 데이터를 활용하기 위해서는 초기화 시점이 PostLoad 이후이어야한다. 하지만 PostLoad는 CDO를 생성할 때도 호출되고 CDO에는 데이터 애셋 변수에 값이 할당되어 있지 않기 때문에 nullptr일 것이다. 그렇기 때문에 nullptr check를 해주어야 CDO에서 초기화 시 오류를 피할 수 있다.

Eu4ng commented 1 year ago
  1. EquipmentInstance 초기화 EquipmentDefinition IsValid라면 EquipmentComponent IsValid라면 -> EquipmentDefinition, EquipmentComponent 유효성 보장

EquipmentInstance 생성 생성 후 EquipmentInstance 초기화 // EquipmentInstance->Init(EquipmentDefinition), EquipmentInstance->SetEquipmentComponent(EquipmentComponent)