게임 개발/Unreal Engine

[UE4] DataTable->FindRow의 ContextString 의미?

지노윈 2022. 4. 22. 23:37
반응형

UDataTable->FindRow에서 ContextString의 의미는 검색을 제대로 못할 경우 메시지 출력할때 이 스트링을 포함하여 출력합니다.

	template <class T>
	T* FindRow(FName RowName, const FString& ContextString, bool bWarnIfRowMissing = true)

 

다음의 코드를 보면 ContextString이 어떻게 출력되는지 알 수 있습니다.

코드가 의도하는 것은 DataTable '%s'이며 테이블의 이름을 넣어 주면 에러 발생시 어떤 테이블인지 알 수 있어서 유용합니다.​

if(RowStruct == nullptr)
{
    UE_LOG(LogDataTable, Error, TEXT("UDataTable::FindRow : '%s' specified no row for DataTable '%s'."), ContextString, *GetPathName());
    return nullptr;
}

if(!RowStruct->IsChildOf(T::StaticStruct()))
{
    UE_CLOG(bWarnIfRowMissing, LogDataTable, Error, TEXT("UDataTable::FindRow : '%s' specified incorrect type for DataTable '%s'."), ContextString, *GetPathName());
    return nullptr;
}

if(RowName == NAME_None)
{
    UE_CLOG(bWarnIfRowMissing, LogDataTable, Warning, TEXT("UDataTable::FindRow : '%s' requested invalid row 'None' from DataTable '%s'."), ContextString, *GetPathName());
    return nullptr;
}

uint8* const* RowDataPtr = GetRowMap().Find(RowName);
if (RowDataPtr == nullptr)
{
    if (bWarnIfRowMissing)
    {
        UE_LOG(LogDataTable, Warning, TEXT("UDataTable::FindRow : '%s' requested row '%s' not in DataTable '%s'."), ContextString, *RowName.ToString(), *GetPathName());
    }
    return nullptr;
}