玩家统计

玩家统计

记录每位玩家的计数和个人最佳成绩。

免费开始使用

玩家统计

记录每位玩家的计数和个人最佳成绩。

SDK 与 REST

与 Unity、Godot 或 Unreal 集成,或使用 REST 接口。

项目控制台

在项目中配置各项功能并管理当前数据。

快速集成

快速集成

玩家统计
视频即将上线

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

快速集成
Unity (C#)
using UnityEngine;
using PM.horizOn.Cloud.Manager;
using PM.horizOn.Cloud.Objects.Network.Requests;

var manager = StatisticsManager.Instance;
var snapshot = await manager.GetStatistics();
if (snapshot == null) { Debug.LogWarning(manager.LastErrorCode); return; }
string pendingKey = "horizOn_statistics_pending_" + snapshot.userId;
var pending = PlayerPrefs.HasKey(pendingKey)
    ? JsonUtility.FromJson<UpdateStatisticsRequest>(PlayerPrefs.GetString(pendingKey))
    : new UpdateStatisticsRequest {
        userId = snapshot.userId, operationId = manager.CreateOperationId(),
        updates = new[] { new StatisticUpdate("kills", 3), new StatisticUpdate("best_score", 250) }
    };
string originalJson = JsonUtility.ToJson(pending);
PlayerPrefs.SetString(pendingKey, originalJson);
PlayerPrefs.Save();
var result = await manager.UpdateStatistics(pending.updates, pending.operationId);
if (result == null) {
    // Keep the saved ID and batch. Reconcile OPERATION_EXPIRED before a new logical report.
    Debug.LogWarning(manager.LastErrorCode);
    return;
}
// A late success for O1 must never acknowledge a newer pending O2.
if (PlayerPrefs.GetString(pendingKey, null) == originalJson) {
    PlayerPrefs.DeleteKey(pendingKey);
    PlayerPrefs.Save();
}
foreach (var counter in result.values) Debug.Log(counter.key + "=" + counter.value);

这些示例使用 Unity SDK(C#)和 REST API。Godot 和 Unreal 在各自的 SDK 中有相同的调用: 参见快速入门

常见问题

常见问题

准备好开始集成了吗?

今天就开始使用 horizOn 构建你的游戏后端,免费套餐开箱即用。