أفكار وميزات للعبة

ميزتك التالية

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

أرسل الجولات والإقصاءات وأفضل النتائج في دفعة جلسة واحدة، بقواعد المجموع أو الأعلى أو الأدنى أو أحدث قيمة.

SDK: فرع developتتطلب جلسة لاعب
Unity
رسم توضيحي لميزة إحصاءات اللاعب
النتيجة المرئية

ترسل اللعبة جلسة كاملة في دفعة واحدة وتعرض العدادات والفترات الحالية.

الفيديو قادم لاحقًا

لا يوجد فيديو لهذه الخطوة بعد. الدليل وطلب 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// اقرأ لقطة أولًا ثم احتفظ بمعرّف العملية والدفعة الأصلية عند إعادة
9// المحاولة. تتطلب النتيجة المنتهية أو غير المؤكدة مطابقة الحالة، ولا يُنشأ
10// معرّف جديد تلقائيًا.
11// This explicit action reports the shown persisted batch.
12public sealed class StatisticsDemo : MonoBehaviour
13{
14 public async void RunReviewedAction()
15 {
16 var sessionUser = UserManager.Instance.CurrentUser;
17 if (sessionUser == null || !sessionUser.IsValid()) return;
18 var manager = StatisticsManager.Instance;
19 var snapshot = await manager.GetStatistics();
20 if (snapshot == null) { Debug.LogWarning(manager.LastErrorCode); return; }
21 string pendingKey = "horizOn_statistics_pending_" + snapshot.userId;
22 var pending = PlayerPrefs.HasKey(pendingKey)
23 ? JsonUtility.FromJson<UpdateStatisticsRequest>(PlayerPrefs.GetString(pendingKey))
24 : new UpdateStatisticsRequest {
25 userId = snapshot.userId, operationId = manager.CreateOperationId(),
26 updates = new[] { new StatisticUpdate("kills", 3), new StatisticUpdate("best_score", 250) }
27 };
28 string originalJson = JsonUtility.ToJson(pending);
29 PlayerPrefs.SetString(pendingKey, originalJson);
30 PlayerPrefs.Save();
31 var result = await manager.UpdateStatistics(pending.updates, pending.operationId);
32 if (result == null) {
33 // Keep the saved ID and batch. Reconcile OPERATION_EXPIRED before a new logical report.
34 Debug.LogWarning(manager.LastErrorCode);
35 return;
36 }
37 // A late success for O1 must never acknowledge a newer pending O2.
38 if (PlayerPrefs.GetString(pendingKey, null) == originalJson) {
39 PlayerPrefs.DeleteKey(pendingKey);
40 PlayerPrefs.Save();
41 }
42 foreach (var counter in result.values) Debug.Log(counter.key + "=" + counter.value);
43 }
44}
فتح مثال SDK الكامل ↗

اختبر ميزتك الجديدة.

ترسل اللعبة جلسة كاملة في دفعة واحدة وتعرض العدادات والفترات الحالية.

اختر في لوحة التحكم المشروع نفسه الموجود في إعداد لعبتك.

نقاط النهاية
  • GET/statistics
  • GET/statistics/definitions
  • POST/statistics
كل نقاط النهاية في مرجع API
اقتراحنا لخطوتك التالية

أضف رقمًا قياسيًا لكل جولة.

احفظ النتيجة بعد الجولة وأظهر المتصدر. واصل استخدام اتصالك وجلسة اللاعب.