๐
2025-12-05
๋น๋ฉ/ํฌ๋ํํ ์์ ฏ์ ๊ฒฐ๊ณผ๋ฌผ ์์ธํ์ด์ง์์ ์คํฏ์ ํ์ํ ๋ ๊ฐ ์คํฏ๊ณผ ํจ๊ณผ๋ง๋ค ํ์ ์ฉ์ด๊ฐ ๋ค๋ฆ
DeveloperSettings + GameInstanceSubsystem + DataTable ์กฐํฉ์ผ๋ก ์ค์ ๊ด๋ฆฌ ์์คํ ๊ตฌ์ถ
// GameplayTagDisplaySettings.h
UCLASS(Config=Game, DefaultConfig)
class UGameplayTagDisplaySettings : public UDeveloperSettings
{
UPROPERTY(Config, EditAnywhere)
TSoftObjectPtr<UDataTable> GameplayTagDisplayDataTable;
};
void UGameplayTagDisplaySubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
const UGameplayTagDisplaySettings* Settings = GetDefault<UGameplayTagDisplaySettings>();
GameplayTagDisplayTable = Settings->GameplayTagDisplayDataTable.LoadSynchronous();
// TMap์ผ๋ก ์บ์ฑ (O(1) ์กฐํ)
TArray<FGameplayTagDisplayData*> Rows;
DataTable->GetAllRows<FGameplayTagDisplayData>(TEXT("LoadDataTable"), Rows);
for (FGameplayTagDisplayData* Row : Rows)
{
CachedDisplayData.Add(Row->Tag, *Row);
}
}
void UItemInfo::UpdateCraftingItemStatView(const FItemData& ItemData)
{
TagDisplaySubsystem = UGameplayTagDisplaySubsystem::Get(this);
ItemStatView->ClearListItems();
switch (ItemData.Category)
{
case EItemCategory::TOOL:
// ์ฑ์ทจ ์ ํ - ์ฌ๋ฌ ํ๊ทธ๋ฅผ ์ผํ๋ก ์ฐ๊ฒฐ
UStatDataObject* StatData = NewObject<UStatDataObject>();
StatData->StatName = TagDisplaySubsystem->GetDisplayName_KR(TAG_Display_Stat_HarvestTarget);
StatData->StatValue = TagDisplaySubsystem->GetDisplayNamesFromContainer_KR(
ItemData.ToolData.HarvestTargetTag);
ItemStatView->AddItem(StatData);
// ๊ณต๊ฒฉ๋ ฅ - ๊ฐ + ๋จ์ ํฌ๋งทํ
GetStatData_KR(*StatData, TAG_Display_Stat_AttackDamage, ItemData.ToolData.DamageValue);
ItemStatView->AddItem(StatData);
break;
}
}
void UItemInfo::GetStatData_KR(UStatDataObject& OutStatData, const FGameplayTag& StatTag, const float& StatValue)
{
FGameplayTagDisplayData DisplayData;
if (TagDisplaySubsystem->GetDisplayData(StatTag, DisplayData))
{
OutStatData.StatName = DisplayData.DisplayName_KR;
OutStatData.StatValue = FText::AsNumber(StatValue);
OutStatData.StatUnit = TagDisplaySubsystem->GetUnit(StatTag); // "์ด", "%", "๊ฐ" ๋ฑ
}
}
GetDisplayName_KR/EN - ๋จ์ผ ํ๊ทธ ํ์๋ช
GetDisplayNamesFromContainer_KR - ์ฌ๋ฌ ํ๊ทธ๋ฅผ ์ผํ๋ก ์ฐ๊ฒฐGetUnit - ๋จ์๋ง ๊ฐ์ ธ์ค๊ธฐGetDisplayData - ์ ์ฒด ๋ฐ์ดํฐ ํ ๋ฒ์Settings (์๋ํฐ) โ Subsystem (์บ์ฑ) โ Widget (์ฌ์ฉ)
โ โ โ
DT ๊ฒฝ๋ก ์ค์ Initialize์์ Get()์ผ๋ก ์ ๊ทผ
TMap์ ์บ์ฑ GetDisplayName_KR()
์ฒ์์ ํจ๊ณผ ํ๊ทธ, ์คํฏ ๋ณ๋ก ์ถ๋ ฅํ ์ด๋ฆ๊ณผ ๋จ์๋ฅผ ๋งคํํ๋ ํจ์๋ฅผ ๋ง๋ค๋ค๊ฐ ํจ๊ณผ๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ ๋ ๋ถํธํจ์ด ์ปค์ง๊ฒ ๊ฐ์ ๋ฐ์ดํฐ ํ ์ด๋ธ๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ์ ํํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๊ฒ์์ธ์คํด์ค ์๋ธ์์คํ ์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ฏ์์ ์์ดํ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ๋ถ๊ธฐ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ์ด ์ข ์ง์ ๋ถํด ๋ณด์ด๊ธด ํ๋๋ฐ ์ด๊ฑด ๋์ค์ ํฉํ ๋ฆฌ ํจํด์ผ๋ก ๊ฐ์ ํด๋ด์ผ๊ฒ ๋ค.
๋ฉ์ง๋ค