游戏创意与功能

你的下一项功能

玩家统计

按会话批量上报回合数、击败数和最佳成绩,支持求和、最大值、最小值或最新值规则。

SDK:develop 分支需要玩家会话
Unity
玩家统计功能示意图
可见的结果

游戏在一个批次中上报完整会话,并显示当前计数器和周期。

视频稍后提供

此步骤尚无视频。指南和MCP请求已可使用。

玩家统计

准备同一个项目

  1. 在仪表盘中选择与游戏配置相同的项目。

    玩家统计 →
  2. 在控制台表单中创建或复用这些测试条目。这些是示例值,并非项目当前数据。

    统计定义
    kills: mode=sum, reset=none; best_score: mode=max, reset=none

    求和会累加每次上报。最大值和最小值保留极值;最新值直接替换。最大值、最小值和最新值均由首次上报初始化。数值必须是安全范围内的有符号整数。

  3. 运行示例前先保存、重新加载并核对条目。保留其他定义。

实现此功能

你可以预览指南。运行需要有效的项目密钥。 准备项目

已安装 SDK、导入项目配置,且玩家已登录。

此 SDK 示例使用 develop。请检查已安装的 SDK 是否具备所需 API。

先通过快速入门连接目标玩家,再通过明确的按钮或场景操作调用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示例 ↗

测试你的新功能。

游戏在一个批次中上报完整会话,并显示当前计数器和周期。

在仪表盘中选择与游戏配置相同的项目。

接口
  • GET/statistics
  • GET/statistics/definitions
  • POST/statistics
API 参考中的全部接口
下一步建议

为每一局添加最高分。

每局结束后保存分数并展示领先者。继续使用现有连接和玩家会话。