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

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

Предметы

Уникальное снаряжение со свойствами, правилами каталога и инвентарём выбранного проекта.

SDK: developТребуется сессия игрока
Unity
Иллюстрация функции «Предметы»
Видимый результат

После сохранения каталог содержит starter_sword. После проверенной покупки текущий инвентарь содержит его уникальный instanceId.

Видео появится позже

Для этого шага пока нет видео. Инструкция и запрос MCP уже доступны.

Предметы

Подготовьте тот же проект

  1. Выберите в панели тот же проект, что указан в конфигурации игры.

    Предметы →
  2. Создайте или используйте эти тестовые записи в форме панели. Это примеры значений, а не текущие данные проекта.

    Ключ
    starter_sword
    Название
    Quickstart Sword
    Тип
    equipment
    Редкость
    common
    Активен
    true
    Базовые свойства
    {"damage":5}
    Правила свойств
    []

    Предметы имеют собственные идентификаторы и свойства. Счётные ресурсы остаются в Значениях игрока, а чисто визуальная косметика в Профиле игрока.

    Подготовьте coins по руководству значений. Сохраните активное предложение starter-sword: стоимость 10 coins, награда 1 starter_sword.

    Значения игрока →
  3. Сохраните, загрузите заново и проверьте записи до запуска примера. Сохраните остальные определения.

Добавьте эту функцию

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

SDK установлен, конфигурация проекта импортирована, игрок вошёл в систему.

Этот пример SDK использует develop. Проверьте наличие нужных API в установленном SDK.

Завершите подключение нужного игрока по быстрому старту. Вызовите ReadCatalogPage(), ReadInventory() явной кнопкой или действием сцены. Открытие файла само по себе запрос не отправляет.

C#
Assets/Scripts/ItemsDemo.cs
Вызов horizOn
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3​
4public sealed class ItemsDemo : MonoBehaviour
5{
6 // Initialize/connect and restore the existing player in the Quickstart first.
7 public async void ReadInventory()
8 {
9 var user = UserManager.Instance.CurrentUser;
10 if (user == null || !user.IsValid()) return;
11 var result = await ItemsManager.Instance.GetInventory(user.UserId);
12 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
13 foreach (var item in result.Data.instances)
14 Debug.Log($"{item.instanceId}: {item.itemKey}");
15 // Keep result.Data.revision for a separately reviewed mutation.
16 }
17​
18 // Wire a separate explicit action; no automatic catalog traversal or poll.
19 public async void ReadCatalogPage()
20 {
21 var user = UserManager.Instance.CurrentUser;
22 if (user == null || !user.IsValid()) return;
23 var result = await ItemsManager.Instance.GetCatalog(user.UserId, limit: 1);
24 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
25 Debug.Log($"Catalog revision: {result.Data.revision}");
26 // Explicit Next keeps result.Data.revision and nextAfterKey unchanged.
27 }
28}
29// SDK ItemsExample/ItemsSampleStore persist original instanceId/body/revision before writes.
30// Keep the original Player Values operationId for purchase recovery.
31// The initial success may include item references; retained replay may return empty applied/items.
32// Read the current inventory separately. Never reconstruct earlier item references.
33// A failed refresh never authorizes a replacement purchase or a local item grant.
Открыть полный пример SDK ↗

Использовать сохранённый предмет

Импортируйте официальный пример и вспомогательные файлы. Проверьте предложение и выполните последовательность с текущим игроком. Дождитесь каждого шага и подтвердите покупку один раз. Сохраните исходный запрос при неопределённом ответе.

ItemsExample: projectId → ReadOneCatalogPage() → ReviewOffers() → SavePurchaseAfterReview("starter-sword") → RefreshInventory()

Проверьте новую функцию.

После сохранения каталог содержит starter_sword. После проверенной покупки текущий инвентарь содержит его уникальный instanceId.

Выберите в панели тот же проект, что указан в конфигурации игры.

Эндпоинты
  • GET/items
  • GET/items/catalog
  • POST/items/adjust
  • POST/items/equip
  • POST/items/discard
Все эндпоинты в справочнике API
Наше предложение для следующего шага

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

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