Pomysły i funkcje gry

Twoja następna funkcja

Obiekty współdzielone

Udostępniaj nieinterpretowane dane gry przy użyciu jawnych zasad dostępu, indeksowanych zapytań i pierwotnych rewizji.

SDK: developWymagana sesja gracza
Unity
Ilustracja funkcji Obiekty współdzielone
Widoczny rezultat

Przed utworzeniem odczytaj wykorzystanie właściciela. Tworzenie używa rewizji tego wykorzystania; aktualizacja i usuwanie używają pierwotnej rewizji obiektu. Właściciel, grupa i termin wygaśnięcia ustalony przy tworzeniu pozostają niezmienione.

Wideo pojawi się później

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

Obiekty współdzielone

Przygotuj ten sam projekt

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

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

    Klucz
    bases
    Zasady odczytu
    all
    Zasady zapisu
    owner
    Pozycja w siatce
    true
    Maksymalna liczba bajtów na obiekt
    1024
    Maksymalna liczba obiektów na właściciela
    1

    Klucze pozostają zarezerwowane. Po pierwszym użyciu zasady, schemat wyszukiwania, TTL i pozycja są niezmienne. Archiwizacja blokuje nowe zapisy; odczyt i usuwanie pozostają dostępne.

    Ten pierwszy przykład odczytuje dane. Nie tworzy grupy, meczu ani obiektu. Pusta lista jest poprawną pierwszą odpowiedzią.

  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 ReadWorldMap() jawnym przyciskiem lub akcją sceny. Samo otwarcie pliku nie wysyła żądania.

C#
Assets/Scripts/SharedObjectsDemo.cs
Wywołanie horizOn
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3using PM.horizOn.Cloud.Objects.Network.Responses;
4​
5public sealed class SharedObjectsDemo : MonoBehaviour
6{
7 // Initialize/connect and restore the existing player in the Quickstart first.
8 // Wire an explicit player action; do not add this read to a startup/poll loop.
9 public async void ReadWorldMap()
10 {
11 var user = UserManager.Instance.CurrentUser;
12 if (user == null || !user.IsValid()) return;
13 var result = await SharedObjectsManager.Instance.QueryObjects(user.UserId, "bases", new SharedQuery {
14 mode = SharedQueryMode.Rectangle,
15 minX = -10, maxX = 10, minY = -10, maxY = 10, limit = 20
16 });
17 if (!result.IsSuccess) {
18 Debug.LogWarning(result.ErrorCode);
19 return;
20 }
21 foreach (var item in result.Data.objects) {
22 byte[] bytes = item.data; // Opaque game bytes; validate your game's own format.
23 Debug.Log($"Object {item.id}: {bytes.Length} bytes");
24 }
25 // Respect result.Data.pollAfterSeconds; no automatic poll or next-page loop.
26 // Keep exact dataBase64 and typed search metadata unchanged on metadata edits.
27 // Persist original target, bytes and If-Match revision before a single mutation.
28 // Unknown CREATE: explicit GetRecoveryUsage/QueryRecoveryObjects; never resend.
29 // Generic/defense/ranked VA starts share one start/submit lease; do not replace a pending run.
30 // Trusted validation and durable ordinary Inbox delivery belong to the game backend.
31 }
32}
Otwórz pełny przykład SDK ↗

Mapa świata

Przechowuj bazy właścicieli jako nieinterpretowane bajty. Jawnie odpytuj skonfigurowany prostokąt siatki o współrzędnych całkowitych; aktualizuj z pierwotną rewizją obiektu. Pozycja jest indeksem zapytań i nie waliduje zasad gry.

Asynchroniczne PvP

Wybierz przeciwnika przez ograniczone zapytanie liczb całkowitych o rozkładzie niejednostajnym. Wczytaj jego bajty obrony i zweryfikuj rozgrywkę przy użyciu przebiegu Validated Actions kontrolowanego przez serwer. Tylko zaufany backend rozstrzyga wynik i wysyła niezmienne powiadomienie Inbox.

Używaj odpowiednich sesji graczy, trwale zachowanego pierwotnego zamiaru zapisu oraz jawnych, ograniczonych odczytów. Zaufana walidacja wyników i dostarczanie przez Inbox należą do backendu gry; Account Keys nigdy nie mogą trafiać do buildów gry.

Przetestuj nową funkcję.

Przed utworzeniem odczytaj wykorzystanie właściciela. Tworzenie używa rewizji tego wykorzystania; aktualizacja i usuwanie używają pierwotnej rewizji obiektu. Właściciel, grupa i termin wygaśnięcia ustalony przy tworzeniu pozostają niezmienione.

Wybierz w panelu ten sam projekt co w konfiguracji gry.

Punkty końcowe
  • GET/shared-objects/collections
  • GET/shared-objects/{collection}/usage
  • GET/shared-objects/{collection}/objects/{objectId}
  • POST/shared-objects/{collection}/query
  • POST/shared-objects/{collection}/objects
  • PUT/shared-objects/{collection}/objects/{objectId}
  • DELETE/shared-objects/{collection}/objects/{objectId}
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.