E4-Unreal / test-simple-game-framework

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

데이터 애셋에 관하여 #45

Open Eu4ng opened 1 year ago

Eu4ng commented 1 year ago

문제 상황

ItemDefinition 데이터 애셋에는 PickupInfo 애셋이, FireArmDefinition 데이터 애셋에는 AmmoDefinition 데이터 애셋이 링크되어 있다. 이 경우, 부모 애셋부터 링크된 애셋까지 매번 IsValid 검사를 진행하는데 너무 비효율적이고 실수가 잦다.

추정 해결 방안

사용법 예시

virtual bool CheckValid() const override
{
    // Check ItemDefinition
    if(!Super::CheckValid()){ return false; }

    // Check DisplayMesh
    if(!IsValid(DisplayMesh))
    {
        UE_LOG(LogItem, Error, TEXT("UEquipmentDefinition::CheckValid > %s: DisplayMesh is not valid"), *this->GetName())
        return false;
    }

    return true;
}
if(!IsValid(EquipmentDefinition)) { return; }
if(!EquipmentDefinition->CheckValid()) { return; }

문제 상황

데이터 애셋을 활용하는 클래스에서 함수 호출 때마다 데이터 애셋 유효성 검사하는 것은 비효율적이다. PostInitializeComponents와 같이 데이터 애셋이 설정된 순간에만 유효성 검사를 실행하고, 그 결과를 bool 변수로 저장하여 활용하는 것이 좋을 것 같다.

if(!IsValid(EquipmentDefinition)) { bValid = false; return; }
if(!EquipmentDefinition->CheckValid()) { bValid = false; return; }
Eu4ng commented 1 year ago

UPirmaryDataAsset과 UDataAsset의 차이점 : UPrimaryDataAsset은 애셋 매니저에서 검색할 수 있다. 상점에 아이템(데이터 애셋)을 자동으로 추가하는 기능 등에 활용 가능

참고 링크