[햄] 작업일기

230725 DataTable을 출력하기

리리쟝 2023. 7. 25. 18:47

https://wergia.tistory.com/154#google_vignette

 

[UE4] Programming - 데이터 테이블(Data Table)

데이터 테이블(Data Table) 사용하기 작성 기준 버전 :: 4.21.1 게임을 제작할 때 레벨업에 필요한 경험치량이나 스킬의 계수 등 추후에 밸런스 수정 작업이 필요한 값들은 함부로 코드에 상수로 넣어

wergia.tistory.com

https://algorfati.tistory.com/69

 

[Unreal] 테이블 데이터 이용 방법 (DataTable)

Data Table 대량의 데이터를 table 형태로 관리해야하는 상황도 생길 수 있다. 이런 경우 unreal engine의 data table을 사용하면 유용하다. 소스코드 #include "Engine/DataTable.h" USTRUCT() struct FPhysicsPoseData : public

algorfati.tistory.com

 

 

UHamsterGameInstance::UHamsterGameInstance()
{
	FString DialogueDataPath = TEXT("/Game/FirstPerson/Data/HamsterDialogueSample2.HamsterDialogueSample2");
	static ConstructorHelpers::FObjectFinder<UDataTable> DT_HamDialogue(*DialogueDataPath);
	if (DT_HamDialogue.Succeeded())
	{
		UE_LOG(LogTemp, Log, TEXT("Dialogue TableData succeeded"));
	}
	else
	{
		UE_LOG(LogTemp, Log, TEXT("Dialogue TableData not succeeded"));
		return;
	}

	HamsterDialogueTable = DT_HamDialogue.Object;
	HamsterDialogueTable->GetAllRows("", OUT DialogueArray);
}

FHamsterDialogueData* UHamsterGameInstance::GetDialogueData(int index)
{
	if (DialogueArray.Num() <= index)
	{
		return HamsterDialogueTable->FindRow<FHamsterDialogueData>(FName(*(FString::FormatAsNumber(index))), TEXT(""));
	}
	else
	{
		return DialogueArray[index];
	}
} //항목 하나씩 가져오는 함수


TArray<FHamsterDialogueData*> UHamsterGameInstance::GetAllDialogueData()
{
	return DialogueArray;

} //DialogueArray 전체를 가져오는 함수

 

void ATalkableObject::BeginPlay()
{
	auto HamsterGameInstance = Cast<UHamsterGameInstance>(UGameplayStatics::GetGameInstance(GetWorld()));
	DialogDatas = HamsterGameInstance->GetAllDialogueData();

    .
    .
    .
}

bool ATalkableObject::BeginInteract(UHamsterInteractorComponent* InteractorComponent)
{
	if (!TalkPopup->IsVisible()) //뷰포트에 없으면 위젯 띄우기
	{
		TalkPopup->AddToViewport();
	}

	if (CurrentDialogIndex >= DialogDatas.Num())
	{
		CurrentDialogIndex = 0;
		
		if (TalkPopup->IsVisible())
		{
			UE_LOG(LogTemp, Log, TEXT("talkable end interact - close talkpopup"));
			TalkPopup->RemoveFromParent();
		}
	}
	else
	{
		TextName->SetText(FText::FromString(DialogDatas[CurrentDialogIndex]->Name));
		TextLine->SetText(FText::FromString(DialogDatas[CurrentDialogIndex++]->Line));
	}

	return true;
}

 

 

인자를 맞게 쓴 것 같은데 함수가 안 되는 것 같으면 냅다 포인터 갈겨보기 / 포인터 빼보기 ㅠ

 

게임인스턴스는 레벨 내내 계속 살아있는데 토커블의 다이얼로그를 가지고 있으면 웃김
나중에 빼야 할듯?
게임인스턴스((((((토커블 관리용 클래스 ))))))))))))) 느낌으로

 

어디가 되고 어디가 명확하게 안 되는지 디버깅으로 확실하게 파악하기!!!!!