Идеи и функции для игры

Ваша следующая функция

Статистика игроков

Сообщайте раунды, убийства и рекорды одним пакетом сессии: сумма, максимум, минимум или последнее значение.

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// требует проверки, а не автоматического нового ID.
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
Наше предложение для следующего шага

Добавьте рекорд для каждого раунда.

Сохраняйте результат после раунда и показывайте лидеров. Продолжайте использовать подключение и сессию игрока.