Pomysły i funkcje gry

Twoja następna funkcja

Mecze

Gry turowe z jawnymi rewizjami, nieprzetwarzanym stanem i osobnymi raportami wyników.

SDK: developWymagana sesja gracza
Unity
Ilustracja funkcji Mecze
Widoczny rezultat

Koordynuj lobby, naprzemienne tury i niezależne raporty końcowe z dwiema sesjami graczy.

Wideo pojawi się później

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

Mecze turowe

Przygotuj ten sam projekt

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

    Mecze →
  2. Pierwsze żądanie nie wymaga dodatkowej definicji. Pusty wynik jest poprawny, dopóki nie powstaną odpowiednie dane gry.

    Użyj dwóch oddzielnych sesji: utwórz lobby, dołącz, rozpocznij w jawnej kolejności, wysyłaj naprzemiennie stany bajtowe i niezależnie zgłoś ten sam wynik końcowy.

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

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

C#
Assets/Scripts/MatchesDemo.cs
Wywołanie horizOn
1using UnityEngine;
2using PM.horizOn.Cloud.Manager;
3​
4public sealed class MatchesDemo : MonoBehaviour
5{
6 // Initialize/connect and restore the existing player in the Quickstart first.
7 // Invoke explicitly. The SDK also enforces the returned polling cadence.
8 public async void ReadMyMatches()
9 {
10 var user = UserManager.Instance.CurrentUser;
11 if (user == null || !user.IsValid()) return;
12 var result = await MatchesManager.Instance.GetMatches(user.UserId);
13 if (!result.IsSuccess) { Debug.LogWarning(result.ErrorCode); return; }
14 Debug.Log($"Ledger revision: {result.Data.revision}");
15 foreach (var match in result.Data.recent)
16 Debug.Log($"Match {match.id}: {match.status}");
17 // Recent may include an active match after this player's forfeit.
18 // Respect result.Data.pollAfterSeconds; no background poll or automatic timeout.
19 }
20}
21// Full two-player recipe: SDK Examples/MatchesExample and MatchesSampleStore.
22// ReadLedger/ReadMatch -> SaveCreateAfterLedgerReview/SaveActionAfterMatchReview.
23// ApplySavedIntent sends one durable original body/revision. Unknown create is reconciled.
24// Never replace a pending original with the revision from a later read.
25// ReportResult uses the original finalStateRevision/result bytes/sorted winnerIds.
26// Ordinary consensus is not trusted victory proof. Ranked runs use Validated Actions.
Otwórz pełny przykład SDK ↗

Dwóch graczy, jedna pierwotna tura

Użyj dwóch oddzielnych sesji: utwórz lobby, dołącz, rozpocznij w jawnej kolejności, wysyłaj naprzemiennie stany bajtowe i niezależnie zgłoś ten sam wynik końcowy.

Zapisz dokładne żądanie przed wysłaniem. Po przekroczeniu czasu odczytaj stan i uzgodnij. Nie zastępuj po cichu rewizji ani pierwotnej intencji.

Raporty używają niezmiennej rewizji końcowej. Zgodność nie dowodzi wiarygodnego zwycięstwa; sprzeczne lub brakujące raporty nie wyznaczają zwycięzcy.

Przebiegi rankingowe wymagają potwierdzonego meczu rankingowego i istniejącego procesu Validated Actions. Zwykłe raporty nie przyznają nagród.

PHP obsługuje zwykłe trasy REST meczów. Walidacja rankingowa i czas rzeczywisty są niedostępne i zwracają FEATURE_NOT_SUPPORTED, gdy wymagane.

Przetestuj nową funkcję.

Koordynuj lobby, naprzemienne tury i niezależne raporty końcowe z dwiema sesjami graczy.

Wybierz w panelu ten sam projekt co w konfiguracji gry.

Punkty końcowe
  • GET/matches
  • GET/matches/limits
  • GET/matches/open
  • GET/matches/{matchId}
  • POST/matches
  • POST/matches/{matchId}/join
  • POST/matches/{matchId}/decline
  • POST/matches/{matchId}/start
  • POST/matches/{matchId}/turn
  • POST/matches/{matchId}/timeout
  • POST/matches/{matchId}/leave
  • POST/matches/{matchId}/cancel
  • POST/matches/{matchId}/result
  • POST/matches/{matchId}/ranked-run
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.