Ideas y funciones para tu juego

Tu próxima función

Estadísticas de jugador

Registra rondas, bajas y récords en un lote por sesión, con reglas de suma, máximo, mínimo o último valor.

SDK: developRequiere una sesión de jugador
Unity
Ilustración de Estadísticas de jugador
El resultado visible

Tu juego envía una sesión completa en un lote y muestra los contadores y períodos actuales.

Vídeo próximamente

Este paso aún no tiene vídeo. La guía y la solicitud MCP ya se pueden utilizar.

Estadísticas de jugador

Preparar el mismo proyecto

  1. Selecciona en el panel el mismo proyecto que en la configuración de tu juego.

    Estadísticas de jugador →
  2. Cread o reutilizad estas entradas de prueba en el formulario del panel. Son valores de ejemplo, no datos actuales.

    Definiciones estadísticas
    kills: mode=sum, reset=none; best_score: mode=max, reset=none

    Suma añade cada informe. Máximo y mínimo conservan el valor extremo; último lo sustituye. Máximo, mínimo y último se inicializan con el primer informe. Los valores son enteros con signo dentro del rango seguro.

  3. Guardad, recargad y verificad las entradas antes del ejemplo. Conservad las demás definiciones.

Implementa esta función

Puedes consultar la guía. Para ejecutarla necesitas una clave de proyecto activa. Preparar el proyecto

SDK instalado, configuración del proyecto importada y jugador conectado.

Este ejemplo del SDK usa develop. Comprueba si las API necesarias están disponibles en el SDK instalado.

Completad la conexión de inicio rápido con el jugador elegido. Llamad a RunReviewedAction() mediante un botón o acción de escena explícita. Abrir el archivo no envía peticiones.

C#
Assets/Scripts/StatisticsDemo.cs
Llamada a 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// Consulta primero el estado y conserva el ID de operación y el lote
9// original al reintentar. Un resultado caducado o incierto requiere
10// comprobación, nunca otro ID automático.
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}
Abrir el ejemplo completo del SDK ↗

Prueba tu nueva función.

Tu juego envía una sesión completa en un lote y muestra los contadores y períodos actuales.

Selecciona en el panel el mismo proyecto que en la configuración de tu juego.

Endpoints de la API
  • GET/statistics
  • GET/statistics/definitions
  • POST/statistics
Todos los endpoints en la referencia de la API
Nuestra sugerencia para el siguiente paso

Dale una puntuación máxima a cada partida.

Guarda la puntuación después de una partida y muestra quién va primero. Sigue usando tu conexión y la sesión del jugador.