ゲームのアイデアと機能

次に追加する機能

アイテム

選択したプロジェクトの個別装備、プロパティ、カタログ規則とインベントリを管理します。

SDK:developプレイヤーセッションが必要
Unity
アイテムのイラスト
確認できる結果

保存後、カタログにstarter_swordが入ります。確認済みのサンプル購入後、現在のインベントリに固有のinstanceIdが表示されます。

動画は後日公開

この手順の動画はまだありません。ガイドとMCPへの依頼は利用できます。

アイテム

同じプロジェクトを準備する

  1. ゲームの設定と同じプロジェクトをダッシュボードで選択してください。

    アイテム →
  2. ダッシュボードのフォームで次のテスト項目を作成するか、既存の項目を使います。表示値は例であり、現在のプロジェクトのデータではありません。

    キー
    starter_sword
    名前
    Quickstart Sword
    種類
    equipment
    レア度
    common
    有効
    true
    基本プロパティ
    {"damage":5}
    プロパティ規則
    []

    アイテムは個別の ID とプロパティを持ちます。数量で扱う資源はプレイヤー値、外見専用の装飾はプレイヤープロフィールに保存します。

    プレイヤー値のガイドでcoinsを準備します。有効なオファーstarter-swordを保存し、コストを10 coins、アイテム報酬を1 starter_swordにします。

    プレイヤー数値 →
  3. 実行前に保存、再読み込み、確認を行います。他の定義は保持してください。

この機能を実装する

ガイドは閲覧できます。実行には有効なプロジェクトキーが必要です。 プロジェクトを準備する

SDK をインストールし、プロジェクト設定をインポート済みで、プレイヤーがログインしていること。

この SDK サンプルは develop を使用します。必要な API がインストール済みの SDK にあるか確認してください。

クイックスタートで対象プレイヤーを接続します。ボタンやシーンの明示的な操作からReadCatalogPage(), ReadInventory()を呼び出してください。ファイルを開くだけではリクエストは送信されません。

C#
Assets/Scripts/ItemsDemo.cs
horizOn 呼び出し
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3​
4public sealed class ItemsDemo : MonoBehaviour
5{
6 // Initialize/connect and restore the existing player in the Quickstart first.
7 public async void ReadInventory()
8 {
9 var user = UserManager.Instance.CurrentUser;
10 if (user == null || !user.IsValid()) return;
11 var result = await ItemsManager.Instance.GetInventory(user.UserId);
12 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
13 foreach (var item in result.Data.instances)
14 Debug.Log($"{item.instanceId}: {item.itemKey}");
15 // Keep result.Data.revision for a separately reviewed mutation.
16 }
17​
18 // Wire a separate explicit action; no automatic catalog traversal or poll.
19 public async void ReadCatalogPage()
20 {
21 var user = UserManager.Instance.CurrentUser;
22 if (user == null || !user.IsValid()) return;
23 var result = await ItemsManager.Instance.GetCatalog(user.UserId, limit: 1);
24 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
25 Debug.Log($"Catalog revision: {result.Data.revision}");
26 // Explicit Next keeps result.Data.revision and nextAfterKey unchanged.
27 }
28}
29// SDK ItemsExample/ItemsSampleStore persist original instanceId/body/revision before writes.
30// Keep the original Player Values operationId for purchase recovery.
31// The initial success may include item references; retained replay may return empty applied/items.
32// Read the current inventory separately. Never reconstruct earlier item references.
33// A failed refresh never authorizes a replacement purchase or a local item grant.
完全なSDKサンプルを開く ↗

保存したアイテムを使う

公式サンプルと補助ファイルをインポートします。オファーを確認して、既存プレイヤーで以下の順番を実行します。各手順の完了を待ち、購入確認は1回だけ行います。応答が不明な場合は元のリクエストを保持します。

ItemsExample: projectId → ReadOneCatalogPage() → ReviewOffers() → SavePurchaseAfterReview("starter-sword") → RefreshInventory()

新しい機能をテストしましょう。

保存後、カタログにstarter_swordが入ります。確認済みのサンプル購入後、現在のインベントリに固有のinstanceIdが表示されます。

ゲームの設定と同じプロジェクトをダッシュボードで選択してください。

エンドポイント
  • GET/items
  • GET/items/catalog
  • POST/items/adjust
  • POST/items/equip
  • POST/items/discard
API リファレンスのすべてのエンドポイント
次のステップへのおすすめ

毎ラウンドにハイスコアを。

ラウンド終了後にスコアを保存し、上位のプレイヤーを表示します。現在の接続とプレイヤーセッションを引き続き使用します。