Skip to main content
Economy v2 が一般提供 (GA) されました。サポートとフィードバックについては、PlayFab フォーラム を参照してください。
Economy v1 (レガシー) には、Game Manager で直接、重み付けされたランダム アイテム分配を定義できる組み込みの ドロップ テーブル 機能がありました。Economy v2 はドロップ テーブルをネイティブ機能として含みませんが、Azure FunctionsExecuteInventoryOperations API と組み合わせて、同じ動作を、より柔軟に実装できます。 このチュートリアルでは、次のようなランダム化されたルート システム全体を構築する方法を説明します。
  • Title Data に、重み付けされたアイテム プールを持つルート テーブルを定義します。
  • Azure Function を使用して、ルート テーブルからランダムなアイテムをロールします。
  • 単一の呼び出しで、コンテナ トークンをアトミックに減算し、ランダムに選択されたアイテムを付与します。

仕組み

  1. Title Data にルート テーブルを定義: ドロップ テーブル構成 (アイテム ID、重み、数量) を JSON として Title Data に格納すると、コードを再デプロイせずに更新できます。
  2. コンテナを仮想通貨として表す: 固定コンテンツを持つコンテナ と同じコンテナ トークン パターンを使用します: 未開封のルート ボックスとして機能する仮想通貨です。
  3. Azure Function を呼び出してコンテナを開く: 関数はルート テーブルを読み取り、重み付けランダム選択を実行し、ExecuteInventoryOperations を呼び出してアトミックに 1 個のコンテナ トークンを減算し、ランダムに選択されたアイテムを追加します。

前提条件

ステップ 1: Title Data にルート テーブルを定義する

デザイナーがコードの変更なしにドロップ率を更新できるように、ルート テーブル定義を Title Data に格納します。

ルート テーブル構造の例

LootTables という Title Data キーを JSON 値で作成します。
各ルート テーブルには次のプロパティが含まれます。

Title Data の設定

Game Manager

  1. Content > Title Data に移動します。
  2. LootTables というキーを作成します。
  3. 値として JSON ルート テーブル構成を貼り付けます。
  4. Save を選択します。

API

SetTitleData を使用します。

ステップ 2: Azure Function を作成する

プレイヤーがコンテナを開きたい場合にゲーム クライアントが呼び出す Azure Function を作成します。この関数は次のようになります。
  1. プレイヤーが少なくとも 1 個のコンテナ トークンを持っていることを確認します。
  2. Title Data からルート テーブルを読み取ります。
  3. 重み付けランダム選択を実行します。
  4. ExecuteInventoryOperations を呼び出して、アトミックにトークンを減算し、報酬を付与します。

データ モデル

重み付けランダム選択

完全な Azure Function

GetContainerCurrencyId ヘルパー関数は、ルート テーブル名を対応するコンテナ通貨 ID にマッピングします。このマッピングはルート テーブルと一緒に Title Data に格納するか、命名規則を使用できます。

ステップ 3: コンテナ トークンをプレイヤーに付与する

ゲームプレイ、ストア購入、または報酬を通じてプレイヤーにコンテナ トークンを付与します。固定コンテンツを持つコンテナ で説明されているのと同じアプローチを使用します。

ステップ 4: ゲーム クライアントから関数を呼び出す

プレイヤーがコンテナを開きたい場合、ExecuteFunction を使用して Azure Function を呼び出します。
レスポンスには、ランダムに選択された報酬が含まれます。

ルート テーブルの設計パターン

レアリティ層

指数関数的に減少する重みを持つクラシックなレアリティ システム:
ドロップ確率:
  • Common: 約 90.0%
  • Uncommon: 約 9.0%
  • Rare: 約 0.9%
  • Legendary: 約 0.09%

混合報酬でのマルチロール

混合プールから 3 個のランダム アイテムを与える supply crate:

保証付き + ランダム (ピティ システム)

“10 回開くごとに Rare 以上を保証” というパターンには、プレイヤーの開封回数を 表示プロパティ または プレイヤー データ で追跡し、しきい値に達した際に Azure Function 内でランダム選択を上書きします。

ネストされたドロップ テーブル

ルート テーブルは ID で別のルート テーブルを参照できます。Azure Function は参照を再帰的に解決します。
関数は ItemIdTABLE: で始まるかどうかを確認し、そうであればアイテムを直接付与するのではなく、参照されたテーブルでロールします。

セキュリティに関する考慮事項

  • ルート ロジックは常に Azure Function 内でサーバー側で実行してください。 ロールされたアイテムを決定するためにクライアントを信頼しないでください。このアプローチにより、操作を防止します。
  • ExecuteInventoryOperations の呼び出しで IdempotencyId を使用します。 関数が再試行された場合の重複付与を防ぎます。詳細については、べき等な取引と再試行 を参照してください。
  • 減算する前にプレイヤーのインベントリを確認して、コンテナの所有権を検証してください。 ExecuteInventoryOperationsSubtract 操作は、プレイヤーが十分なトークンを持っていない場合に失敗し、バッチ全体がロールバックされます。
  • 監査のためにすべてのロールをログに記録してください。 関数の戻り値と PlayStream イベントにより、各プレイヤーが受け取ったものの証跡が得られます。

関連項目

最終更新日 2026年8月13日