すべてをまとめる - エンタイトルメントの基礎 - (Unreal Engine モジュール)
Last updated on February 4, 2026
注釈:本資料はAI技術を用いて翻訳されています。
UI をエンタイトルメントに接続する
-
OwnedCountWidgetEntry_StarterCPP ファイルを開き、RetrieveEntitlementWithForceRequest()関数を見つけて、既存の実装を以下のコードに置き換えます。この更新されたコードは、先ほど実装したGetOrQueryUserItemEntitlement()関数を呼び出し、ShowOwnedCount()を完了時のデリゲートとしてバインドします。void UOwnedCountWidgetEntry_Starter::RetrieveEntitlementWithForceRequest(const bool bForceRequest)
{
SetVisibility(ESlateVisibility::Collapsed);
const ULocalPlayer* LocalPlayer = GetOwningPlayer()->GetLocalPlayer();
W_Parent = GetFirstOccurenceOuter<UStoreItemListEntry>();
if (W_Parent && LocalPlayer)
{
// Get item.
const UStoreItemDataObject* ItemData = W_Parent->GetItemData();
if (!ItemData)
{
return;
}
EntitlementsSubsystem->GetOrQueryUserItemEntitlement(
LocalPlayer->GetPreferredUniqueNetId().GetUniqueNetId(),
ItemData->GetStoreItemId(),
FOnGetOrQueryUserItemEntitlementComplete::CreateUObject(this, &ThisClass::ShowOwnedCount),
bForceRequest);
}
} -
EquipmentInventoryWidget_StarterCPP ファイルを開き、QueryEquipmentItems()とSaveEquipments()を置き換えて、プレイヤーの装備を実際にクエリおよび保存するようにします。void UEquipmentInventoryWidget_Starter::QueryEquipmentItems()
{
const ULocalPlayer* LocalPlayer = GetOwningPlayer()->GetLocalPlayer();
if (!LocalPlayer)
{
UE_LOG_ENTITLEMENTS_ESSENTIALS(Warning, "Failed to save customization. Local player is invalid.");
Ws_Root->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Error);
return;
}
const int32 LocalUserNum = LocalPlayer->GetControllerId();
const FUniqueNetIdPtr UserId = LocalPlayer->GetPreferredUniqueNetId().GetUniqueNetId();
Ws_Root->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Loading);
// Get the equipment items.
EntitlementsSubsystem->GetUserEquipments(
LocalUserNum,
UserId,
FOnUpdateUserEquipmentsComplete::CreateWeakLambda(this, [this, UserId]
(const FOnlineError& Error, const FPlayerEquipments& Equipments)
{
// Store current equipments if any.
if (Error.bSucceeded)
{
CachedEquipments = Equipments;
}
// Query entitlements to be displayed.
EntitlementsSubsystem->GetOrQueryUserEntitlements(
UserId,
FOnGetOrQueryUserEntitlementsComplete::CreateWeakLambda(this, [this]
(const FOnlineError& Error, const TArray<UStoreItemDataObject*> Entitlements)
{
if (!Error.bSucceeded)
{
Ws_Root->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Error);
return;
}
CachedEntitlements.Empty();
CachedEntitlements.Append(Entitlements);
W_Inventory->RefreshCategories();
W_Inventory->SwitchCategory();
Ws_Root->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Not_Empty);
}));
}));
}void UEquipmentInventoryWidget_Starter::SaveEquipments()
{
const ULocalPlayer* LocalPlayer = GetOwningPlayer()->GetLocalPlayer();
if (!LocalPlayer)
{
UE_LOG_ENTITLEMENTS_ESSENTIALS(Warning, "Failed to save customization. Local player is invalid.");
return;
}
const int32 LocalUserNum = LocalPlayer->GetControllerId();
UAccelByteWarsGameInstance* GameInstance = Cast<UAccelByteWarsGameInstance>(GetGameInstance());
if (!GameInstance)
{
UE_LOG_ENTITLEMENTS_ESSENTIALS(Warning, "Failed to save customization. Game instance is invalid.");
return;
}
UPromptSubsystem* PromptSubsystem = GameInstance->GetSubsystem<UPromptSubsystem>();
if (!PromptSubsystem)
{
UE_LOG_ENTITLEMENTS_ESSENTIALS(Warning, "Failed to save customization. Prompt subsystem is invalid.");
return;
}
PromptSubsystem->ShowLoading(TEXT_SAVING_EQUIPMENTS);
EntitlementsSubsystem->SetUserEquipments(
LocalUserNum,
LocalPlayer->GetPreferredUniqueNetId().GetUniqueNetId(),
CachedEquipments,
FOnUpdateUserEquipmentsComplete::CreateWeakLambda(this, [this, PromptSubsystem]
(const FOnlineError& Error, const FPlayerEquipments& Equipments)
{
PromptSubsystem->HideLoading();
if (!Error.bSucceeded)
{
PromptSubsystem->ShowMessagePopUp(ERROR_PROMPT_TEXT, Error.ErrorMessage);
}
DeactivateWidget();
}));
}
リソース
- このチュートリアルセクションで使用されているファイルは、Byte Wars GitHub リポジトリで入手できます。
- AccelByteWars/Source/AccelByteWars/TutorialModules/Monetization/EntitlementsEssentials/UI/OwnedCountWidgetEntry_Starter.cpp
- AccelByteWars/Source/AccelByteWars/TutorialModules/Monetization/EntitlementsEssentials/UI/EquipmentInventoryWidget_Starter.h
- AccelByteWars/Source/AccelByteWars/TutorialModules/Monetization/EntitlementsEssentials/UI/EquipmentInventoryWidget_Starter.cpp