メインコンテンツまでスキップ

すべてをまとめる - ストアアイテム購入 - (Unreal Engine モジュール)

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

UI をアイテム購入に接続する

  1. ItemPurchaseWidget_Starter CPP ファイルを開き、NativeOnActivated() 関数に移動して、既存の実装を以下のコードに置き換えます。この新しい実装は、ウィジェットがアクティブ化されるとすぐに、前のページで実装した StoreItemPurchaseSubsystem_Starter のレスポンスデリゲートに OnPurchaseComplete() 関数をバインドします。

    void UItemPurchaseWidget_Starter::NativeOnActivated()
    {
    Super::NativeOnActivated();

    W_Parent = GetFirstOccurenceOuter<UStoreItemDetailWidget>();
    ensure(W_Parent);

    StoreItemDataObject = W_Parent->StoreItemDataObject;
    ensure(StoreItemDataObject);

    PurchaseSubsystem = GetGameInstance()->GetSubsystem<UStoreItemPurchaseSubsystem_Starter>();
    ensure(PurchaseSubsystem);
    // ...
    // Setup UI
    SetupPurchaseButtons(StoreItemDataObject->GetPrices());
    Ws_Root->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Not_Empty);
    Tb_Success->SetVisibility(ESlateVisibility::Collapsed);
    Tb_Error->SetVisibility(ESlateVisibility::Collapsed);
    Ss_Amount->SetSelectedIndex(0);
    Ss_Amount->OnSelectionChangedDelegate.AddUObject(this, &ThisClass::UpdatePrice);

    // Show amount if consumable
    Ss_Amount->SetVisibility(StoreItemDataObject->GetIsConsumable() ? ESlateVisibility::Visible : ESlateVisibility::Collapsed);

    // Setup delegate
    PurchaseSubsystem->OnCheckoutCompleteDelegates.AddUObject(this, &ThisClass::OnPurchaseComplete);
    // ...
    // Set focus
    if (W_PurchaseButtonsOuter->HasAnyChildren())
    {
    W_PurchaseButtonsOuter->GetChildAt(0)->SetUserFocus(GetOwningPlayer());
    }

    FTUESetup();
    }
  2. NativeOnDeactivated() 関数に移動し、既存の実装を以下のコードに置き換えます。この実装は、ウィジェットが非アクティブ化されたときに何もトリガーされないように、StoreItemPurchaseSubsystem_Starter のレスポンスデリゲートへのバインディングをクリアします。

    void UItemPurchaseWidget_Starter::NativeOnDeactivated()
    {
    Super::NativeOnDeactivated();

    PurchaseSubsystem->OnCheckoutCompleteDelegates.RemoveAll(this);
    Ss_Amount->OnSelectionChangedDelegate.RemoveAll(this);
    // ...
    }
  3. OnClickPurchase() 関数に移動し、既存の実装を以下のコードに置き換えます。この新しいコードは、前のページで実装した StoreItemPurchaseSubsystem_StarterCreateNewOrder() 関数を呼び出します。

    void UItemPurchaseWidget_Starter::OnClickPurchase(const int32 PriceIndex) const
    {
    Ws_Root->SetWidgetState(EAccelByteWarsWidgetSwitcherState::Loading);
    // ...
    // Otherwise, fallback to use AccelByte platform to purchase the item.
    PurchaseSubsystem->CreateNewOrder(
    GetOwningPlayer(),
    StoreItemDataObject,
    PriceIndex,
    GetSelectedAmount());
    }

リソース