إحصاءات اللاعب

إحصاءات اللاعب

سجّل العدادات والأرقام القياسية الشخصية لكل لاعب.

ابدأ مجانًا

إحصاءات اللاعب

سجّل العدادات والأرقام القياسية الشخصية لكل لاعب.

حزم 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 اليوم. الباقة المجانية متاحة.