Ideias e funcionalidades do jogo

A tua próxima funcionalidade

Estatísticas de jogador

Regista rondas, eliminações e recordes num lote de sessão, com soma, máximo, mínimo ou último valor.

SDK: developRequer uma sessão de jogador
Unity
Ilustração de Estatísticas de jogador
O resultado visível

O jogo envia uma sessão completa num lote e mostra os contadores e períodos atuais.

Vídeo em breve

Este passo ainda não tem vídeo. O guia e o pedido MCP já podem ser usados.

Estatísticas de jogador

Preparar o mesmo projeto

  1. Seleciona no painel o mesmo projeto que na configuração do teu jogo.

    Estatísticas de jogador →
  2. Criem ou reutilizem estas entradas de teste no formulário do painel. São valores de exemplo, não dados atuais.

    Definições estatísticas
    kills: mode=sum, reset=none; best_score: mode=max, reset=none

    Soma adiciona cada envio. Máximo e mínimo guardam o valor extremo; último substitui-o. Máximo, mínimo e último começam no primeiro envio. Os valores são inteiros com sinal no intervalo seguro.

  3. Guardem, recarreguem e verifiquem as entradas antes do exemplo. Preservem as restantes definições.

Integra esta funcionalidade

Podes consultar o guia. Para o executar, precisas de uma chave de projeto ativa. Preparar o projeto

SDK instalado, configuração do projeto importada e jogador com sessão iniciada.

Este exemplo do SDK usa develop. Verifica se as API necessárias existem no SDK instalado.

Concluam a ligação do início rápido com o jogador escolhido. Chamem RunReviewedAction() através de um botão ou ação explícita da cena. Abrir o ficheiro não envia pedidos.

C#
Assets/Scripts/StatisticsDemo.cs
Chamada ao 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// Lê primeiro um estado e mantém o mesmo ID e lote original nas novas
9// tentativas. Um resultado expirado ou incerto exige verificação, nunca um
10// novo 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 o exemplo SDK completo ↗

Testa a tua nova funcionalidade.

O jogo envia uma sessão completa num lote e mostra os contadores e períodos atuais.

Seleciona no painel o mesmo projeto que na configuração do teu jogo.

Endpoints da API
  • GET/statistics
  • GET/statistics/definitions
  • POST/statistics
Todos os endpoints na referência da API
A nossa sugestão para o próximo passo

Dá uma pontuação máxima a cada partida.

Guarda a pontuação depois de uma partida e mostra quem está à frente. Continua a usar a ligação e a sessão do jogador.