ゲームのアイデアと機能

次に追加する機能

プレイヤー統計

ラウンド数、撃破数、最高記録をセッション単位でまとめて報告し、合計・最大・最小・最新値で集計します。

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

ゲームは1回のセッション全体をまとめて報告し、現在のカウンターと期間を表示します。

動画は後日公開

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

プレイヤー統計

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

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

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

    統計の定義
    kills: mode=sum, reset=none; best_score: mode=max, reset=none

    合計は各報告を加算します。最大・最小は極値を保持し、最新値は置き換えます。最大・最小・最新値は最初の報告で初期化されます。値は安全な範囲内の符号付き整数です。

  3. 実行前に保存、再読み込み、確認を行います。他の定義は保持してください。

この機能を実装する

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

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

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

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

C#
Assets/Scripts/StatisticsDemo.cs
horizOn 呼び出し
1using PM.horizOn.Cloud.Objects.Network.Requests;
2using UnityEngine;
3using PM.horizOn.Cloud.Core;
4using PM.horizOn.Cloud.Manager;
5​
6// Existing SDK/project configuration and authenticated player session required.
7// Call RunReviewedAction explicitly after reviewing this example and its data.
8// 最初に状態を読み取り、再試行では同じ操作IDと元の報告内容を保持してください。期限切れや結果不明の場合は照合が必要で、別のIDを自動発行してはいけません。
9// This explicit action reports the shown persisted batch.
10public sealed class StatisticsDemo : MonoBehaviour
11{
12 public async void RunReviewedAction()
13 {
14 var sessionUser = UserManager.Instance.CurrentUser;
15 if (sessionUser == null || !sessionUser.IsValid()) return;
16 var manager = StatisticsManager.Instance;
17 var snapshot = await manager.GetStatistics();
18 if (snapshot == null) { Debug.LogWarning(manager.LastErrorCode); return; }
19 string pendingKey = "horizOn_statistics_pending_" + snapshot.userId;
20 var pending = PlayerPrefs.HasKey(pendingKey)
21 ? JsonUtility.FromJson<UpdateStatisticsRequest>(PlayerPrefs.GetString(pendingKey))
22 : new UpdateStatisticsRequest {
23 userId = snapshot.userId, operationId = manager.CreateOperationId(),
24 updates = new[] { new StatisticUpdate("kills", 3), new StatisticUpdate("best_score", 250) }
25 };
26 string originalJson = JsonUtility.ToJson(pending);
27 PlayerPrefs.SetString(pendingKey, originalJson);
28 PlayerPrefs.Save();
29 var result = await manager.UpdateStatistics(pending.updates, pending.operationId);
30 if (result == null) {
31 // Keep the saved ID and batch. Reconcile OPERATION_EXPIRED before a new logical report.
32 Debug.LogWarning(manager.LastErrorCode);
33 return;
34 }
35 // A late success for O1 must never acknowledge a newer pending O2.
36 if (PlayerPrefs.GetString(pendingKey, null) == originalJson) {
37 PlayerPrefs.DeleteKey(pendingKey);
38 PlayerPrefs.Save();
39 }
40 foreach (var counter in result.values) Debug.Log(counter.key + "=" + counter.value);
41 }
42}
完全なSDKサンプルを開く ↗

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

ゲームは1回のセッション全体をまとめて報告し、現在のカウンターと期間を表示します。

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

エンドポイント
  • GET/statistics
  • GET/statistics/definitions
  • POST/statistics
API リファレンスのすべてのエンドポイント
次のステップへのおすすめ

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

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