パート 3 - コーディング + 例
環境が準備でき、Game Manager に慣れたので、ゲームのコーディングを開始できます。前提条件
ステップ 1 - 環境設定を構成する
コーディングを開始する際に最初にお勧めするのは、環境設定を構成することです。これにより、行うすべての呼び出しに、タイトルへのリンクと特定の Developer Secret Key が使用されることが保証されます。 このステップを済ませるには、コード内のどこか (見つけやすい場所が望ましい) で TitleId と DeveloperSecretKey 変数を指定し、そこに値を割り当てます。 これを行うには、次のように 2 行のコードを別々に追加します。ステップ 2 - 認証を受ける
環境がセットアップされ、PlayFab NuGet パッケージがプロジェクトにインストールされて構成され、スタジオとタイトルの両方が作成されたら、認証のコーディングを開始できます。ユーザーが認証を受ける方法はいくつかあります。この例では、LoginWithCustomId メソッドを使用します。プラットフォーム固有のものを含む、他の認証方法もあります。詳細については、ログインの基本 を参照してください。
次に、ユーザーを認証するためのロジックは次のとおりです。
C# SDK
API
上記のコードは、ゲーム タイトルにリンクされた既存のプレイヤーを検索します。ただし、一致するユーザー名を持つユーザーがいない場合は失敗します。これを回避するには、リクエストのボディに “CreateAccount = true” パラメーターを追加できます。これにより、ユーザー名として送信された値に一致するプレイヤーがいない場合、PlayFab は新しいプレイヤーを作成します。これにより、コードは次のようになります。
C# SDK
API
サインインが成功すると、API は SessionTicket、ユーザーの PlayFab ID、EntityToken など、いくつかのデータ セットを返します。これらは、以下に詳しく示す API からの直接のレスポンスで確認できます。
API から
"code":200 が返されるか、上記の C# の例の loginTask に情報が含まれるようになったら、認証されて次のステップに進む準備ができています。
ステップ 3 - 開始インベントリをセットアップする
有効なプレイヤーでログインしたら (または新しいプレイヤーを作成したら)、最初のステップはそのプレイヤーの開始インベントリを設定することです。これには、ExecuteInventoryOperations API 呼び出しを使用します。ExecuteInventoryOperations 呼び出しでは、プレイヤーのインベントリに対して複数/バッチの InventoryOperations を実行できます。サポートされる操作のタイプは次のとおりです: - Add - Delete - Purchase - Subtract - Transfer - Update
このステップが機能するには、まず Game Manager でタイトル内にアイテムを作成しておく必要があります。
C# SDK
この C# の例では、purchasePrice をすべての取引の標準値として設定していることがわかります。これは、すべてが 0 の価格を持つようにするためです。 1 つのアイテムに複数の価格を設定できるため、purchasePrice 変数は List<PurchasePriceAmount> 型です。
次に気付くのは、リクエストは InventoryOperation のリストに加えて Entity を受け取ることです。これには、先ほどのサインインから取得した値を使って新しいエンティティを作成します。
最後に、各 InventoryOperation は Purchase 値を取ります。ただし、これは ExecuteInventoryOperations 呼び出しで利用可能な各 (Add、Delete、Purchase、Subtract、Transfer、Update) にすることもできます。この場合は Purchase 識別子を使用するため、new PurchaseInventoryItemsOperation が必要です。
購入したいアイテムが何であるかを明確にする必要もあります。これは、アイテムの ID を唯一のパラメーターとして受け取る InventoryItemReference を使って行います。
私たちのコードには SearchItem() というメソッドがありますが、これはアイテムの ID を表す文字列に簡単に置き換えることができます。各アイテムの名前 (または ID) を対応する数量と一致させることを確認してください。
AlternateId と FriendlyId を正常に使用するには、アイテムに Game Manager でそれらの値が構成されている必要があります。これを行うには、詳細な手順を説明している パート 2 - Game Manager の使用 を確認することをお勧めします。
API
以下に示すリクエスト本文で ExecuteInventoryOperations API エンドポイントを呼び出します。ID を対応するものに置き換えてください。Operations は配列であり、複数のタイプの操作を同時に含めることができます。
行う各 API 呼び出しに対して、アクティブなセッションまたはログインしているユーザーに固有の EntityToken を含む X-EntityToken ヘッダーを設定する必要があることを理解することが重要です。つまり、API 呼び出しを行う前に、まず (この例では) LoginWithCustomID を呼び出し、戻りメッセージからすべての API 呼び出しでヘッダーとして使用する EntityToken を取得します。
ステップ 4 - バンドルを作成する
バンドルを使用すると、複数のアイテムを 1 つのアイテムにグループ化できます。バンドルの詳細については、このリンク に従って バンドルのドキュメント を参照してください。 例では、Kitchen によって返されるアイテムをグループ化するために バンドル を使用します。これは Icebox アイテムを維持するのに役立ちます。アイス ボックスの考え方は、必要な材料の 1 つであっても、アイスクリームを購入する際に非消費アイテムとするというものです。 これがどのように機能するかの高レベルの概要は次のとおりです。プレイヤーがインベントリに 1 個の Cream と 1 個の Icebox を持っているとします。Kitchen ストアにアクセスすると、そのプレイヤーはそれら両方のアイテムを使って 1 個の Ice Cream を購入/作成する必要があります。Icebox は非消費なので、期待される機能は 1 個の Ice Cream と 1 個の Icebox がインベントリに残り、1 個の Cream アイテムのみが消費されることです。 私たちが裏で処理する方法は、1 個の Icebox と 1 個の Cream の価格を持ち、返品アイテムが 1 個の Ice Cream と 1 個の Icebox であるバンドルを使用することです。つまり、プレイヤーのインベントリの Icebox は消費されますが、消費する同じ取引で別の Icebox が返され、プレイヤーには Icebox が常にインベントリにあるように見えます。実際には、Icebox のインスタンスは異なりますが、プレイヤーには見えません。 バンドルを作成するには、新しいアイテムを作成した時と同様に、タイトルの Economy セクションに移動する必要があります。Items、Currency などと並んで Bundles というタブがあります。選択すると、画面の右上に New bundle という青いボタンが表示されます。 すると、新しいアイテムを作成する時と似たフォームが表示されますが、重要な違いは、下にスクロールすると Items というセクションがあります。ここでは、バンドルに含めたいアイテムを追加でき、購入時にプレイヤーのインベントリに転送されます。 Add ボタンをクリックすると、カタログ内のすべてのアイテムの検索可能なリストが表示されます。ここで、バンドルに含めたいアイテムを選択できます。アイテムを選択して追加したら、Save and publish に進むと、バンドルがアクティブになり、ストアから購入価格として選択できるようになります。ステップ 5 - ストアを作成する
クラフト ゲームの例に従うと、プレイヤーがストアからアイテムを購入する必要があります。3 つの異なるストア (この場合は場所) があります: Science Machine、Alchemy Engine、Kitchen です。 Kitchen に焦点を当てます。ここで、プレイヤーは 1 Cream と 1 Icebox (作成する必要のある新しいアイテム) の価格で Ice Cream (作成する必要のある新しいアイテム) を購入できます。この特定のケースは、バンドル がストアや取引と共にどのように機能するかを示すために選ばれました。 ストアは Game Manager からのみ作成でき、左側のナビゲーション バーの Economy セクションに移動し、次に異なるタブ オプションから Stores を選択して、青い New store ボタンを選択します。 これにより、新しいアイテムを作成する時に使用したものと似たフォームが表示されます。ここでは、Start Date とストアに与えたい Title のみが必須フィールドです。下にスクロールするとステップ 6 - ストアにバンドルを追加する
バンドルとストアが作成されて公開されたので、ストアで返品可能なアイテムとしてバンドルを追加できます。これを行うには、ストアに移動し、Items タイトルが表示されるまで下にスクロールして、Add ボタンを選択します。 これによりカタログ内のアイテムのリストが表示されます。検索バーの左側には、Items、UGC Items、Bundles、Subscription など、さまざまなタイプのオブジェクトが表示されたドロップダウン メニューがあります。Bundles を選択すると、リストがバンドル タイプのアイテムのみを反映するようにフィルタリングされます。ここでは、以前に作成したバンドルが表示されるはずです。バンドルの名前の横にある Add ボタン、次にウィンドウの末尾にある Add ボタンを選択すると、そのバンドルがその特定のストアの取引可能なアイテムとして追加されます。 続行する前にもう 1 ステップ、バンドルの価格を設定します。この価格は他のアイテムの価格設定と同様に機能し、プレイヤーが購入を受け入れる前にインベントリに必要な価格アイテムを持っている必要があります。価格を設定するには、バンドルの右側にある Add new price ボタンを選択し、アイテム リストから価格にしたいアイテムを選択します。この場合、価格を 1 Icebox と 1 Cream にしたいと思います。 バンドルがストアに追加され、それに応じて価格設定されたので、次のステップに進むことができます。ステップ 7 - バンドルを購入する
バンドルとストアが作成され、バンドルがストアにリンクされたら、そのバンドルを購入して結果のアイテムをインベントリに取得できるようになります。 プレイヤーの視点からバンドルを購入するには、PlayFab API の PurchaseInventoryItems を使用できます。これはバンドルだけでなく、単一のアイテムでも機能します。API
次のケースでは、1 Icebox と 1 Cream の価格で 1 Bundle を購入しようとしています。1 つ以上のアイテムを価格として設定するために、PriceAmount の配列プロパティを使用します。バンドルに FriendlyId を与えたことを確認してください。レスポンスでは、2 つの異なる
TransactionIds が返されることに気付くでしょう。これは、DeleteEmptyStacks プロパティが追加の取引として処理されるためです。前の例では、取引 212 はバンドルの購入に対応し、取引 213 は空の Cream スタックの削除に対応します (インベントリに 1 個の Cream しか持っていなかった場合)。