Pomysły i funkcje gry

Twoja następna funkcja

Przedmioty

Unikalne wyposażenie z właściwościami, regułami katalogu i ekwipunkiem w wybranym projekcie.

SDK: developWymagana sesja gracza
Unity
Ilustracja funkcji Przedmioty
Widoczny rezultat

Po zapisaniu katalog zawiera starter_sword. Po sprawdzonym zakupie bieżący ekwipunek zawiera jego unikatowy instanceId.

Wideo pojawi się później

Ten krok nie ma jeszcze wideo. Instrukcja i polecenie MCP są już dostępne.

Przedmioty

Przygotuj ten sam projekt

  1. Wybierz w panelu ten sam projekt co w konfiguracji gry.

    Przedmioty →
  2. Utwórz lub wykorzystaj te wpisy testowe w formularzu panelu. To wartości przykładowe, nie aktualne dane projektu.

    Klucz
    starter_sword
    Nazwa
    Quickstart Sword
    Typ
    equipment
    Rzadkość
    common
    Aktywny
    true
    Właściwości bazowe
    {"damage":5}
    Reguły właściwości
    []

    Przedmioty mają własną tożsamość i właściwości. Zasoby liczbowe pozostają w Wartościach gracza, a elementy wyłącznie wizualne w Profilu gracza.

    Przygotuj coins według przewodnika wartości. Zapisz aktywną ofertę starter-sword: koszt 10 coins, nagroda przedmiotowa 1 starter_sword.

    Wartości gracza →
  3. Zapisz, wczytaj ponownie i sprawdź wpisy przed uruchomieniem przykładu. Zachowaj pozostałe definicje.

Dodaj tę funkcję

Możesz przeglądać poradnik. Uruchomienie wymaga aktywnego klucza projektu. Przygotuj projekt

Zainstalowany SDK, zaimportowana konfiguracja projektu i zalogowany gracz.

Ten przykład SDK korzysta z develop. Sprawdź, czy wymagane API istnieją w zainstalowanym SDK.

Połącz wybranego gracza zgodnie z szybkim startem. Wywołaj ReadCatalogPage(), ReadInventory() jawnym przyciskiem lub akcją sceny. Samo otwarcie pliku nie wysyła żądania.

C#
Assets/Scripts/ItemsDemo.cs
Wywołanie 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.
Otwórz pełny przykład SDK ↗

Użyj zapisanego przedmiotu

Zaimportuj oficjalny przykład i pliki pomocnicze. Sprawdź ofertę i wykonaj sekwencję z bieżącym graczem. Poczekaj na każdy krok i potwierdź zakup raz. Zachowaj oryginalne żądanie po niepewnej odpowiedzi.

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

Przetestuj nową funkcję.

Po zapisaniu katalog zawiera starter_sword. Po sprawdzonym zakupie bieżący ekwipunek zawiera jego unikatowy instanceId.

Wybierz w panelu ten sam projekt co w konfiguracji gry.

Punkty końcowe
  • GET/items
  • GET/items/catalog
  • POST/items/adjust
  • POST/items/equip
  • POST/items/discard
Wszystkie punkty końcowe w dokumentacji API
Nasza propozycja następnego kroku

Daj każdej rundzie najlepszy wynik.

Zapisz wynik po rundzie i pokaż, kto prowadzi. Nadal korzystaj z połączenia i sesji gracza.