Ein Live-Spiel mit Unity Gaming Services erstellen
UGS-Pakete
| Paket | Minimale Version | Zweck |
|---|---|---|
com.unity.services.core | 1.16.0 | Initialisierung, Abhängigkeitsgraph |
com.unity.services.authentication | 3.6.1 | Spieler-Anmeldung und Identität |
com.unity.services.cloudcode | 2.10.3 | Server-autorisierte C#-Module |
com.unity.services.cloudsave | 3.4.0 | Pro Spieler und gemeinsame Schlüssel-Wert-Speicherung |
com.unity.remote-config | 4.2.5 | Serverseitige Spielkonfiguration |
com.unity.services.deployment | 1.7.2 | Cloud-Ressourcen aus dem Editor bereitstellen |
com.unity.services.tooling | 1.4.1 | Zugriffskontrolle und Spiel-Überschreibungen |
com.unity.services.apis | 1.1.1 | Generierte REST-Clients für alle UGS-Dienste |
- Initialisierungsmuster
- Paketübersicht
- Architektur – Wie Pakete kombiniert werden
- Kerndienste – Kurzreferenz
- Bausteine aus dem Asset Store
- Vorgefertigte Feature-Blaupausen
- Häufige Architekturmuster
- Validierung
- Bereitstellungs-Checkliste
- Detaillierte Referenzen
Initialisierungsmuster
Jedes UGS-Spiel beginnt auf die gleiche Weise. com.unity.services.core muss zuerst initialisiert werden, dann meldet sich der Spieler an:
using Unity.Services.Core;
using Unity.Services.Authentication;
await UnityServices.InitializeAsync();
await AuthenticationService.Instance.SignInAnonymouslyAsync();
// Alle anderen Dienste sind jetzt bereit
Nachdem InitializeAsync() abgeschlossen ist, stehen die Dienst-Singletons (z. B. CloudSaveService.Instance, CloudCodeService.Instance) zur Verfügung.
Paketübersicht
Grundlagen
| Paket | Zweck | Singleton / Einstiegspunkt |
|---|---|---|
| Core | Initialisierung, Abhängigkeitsgraph, Komponentenregister | UnityServices.InitializeAsync() |
| Authentication | Spieler-Anmeldung (anonym, sozial, Unity, Benutzername/Passwort), Identität | AuthenticationService.Instance |
| Services APIs | Generierte REST-Clients für alle UGS-Dienste; Admin-API-Zugriff über Dienstkonten | Direkte API-Klassen |
Spielerdaten und Konfiguration
| Paket | Zweck | Singleton / Einstiegspunkt |
|---|---|---|
| Cloud Save | Pro Spieler Schlüssel-Wert-Daten (Standard, Öffentlich, Geschützt) und spielweite benutzerdefinierte Daten | CloudSaveService.Instance.Data.Player / .Data.Custom |
| Remote Config | Serverseitige Spielkonfiguration, Feature-Flags, JSON-Definitionen | RemoteConfigService.Instance |
| Economy | Virtuelle Währungen, Inventargegenstände, Käufe, Geschäfte | EconomyService.Instance |
Serverlogik und Sicherheit
| Paket | Zweck | Singleton / Einstiegspunkt |
|---|---|---|
| Cloud Code | Server-autorisierte C#-Module für vertrauenswürdige Schreibvorgänge und Validierung | CloudCodeService.Instance → CallModuleEndpointAsync |
| Tooling | Erstellen und Bereitstellen von Zugriffskontroll- (.ac) und Spiel-Überschreibungsdateien (.ugo) | Nur Editor (Bereitstellungsfenster) |
| Deployment | Cloud-Ressourcen (.rc, .ac, .ccmr, .lb usw.) aus dem Unity-Editor bereitstellen | Nur Editor (Dienste > Bereitstellung) |
Soziale und wettbewerbsorientierte Funktionen
| Paket | Zweck | Singleton / Einstiegspunkt |
|---|---|---|
| Multiplayer | Sitzungen, Matchmaking, Lobbys. Bausteine: Multiplayer-Sitzung, Matchmaker-Sitzung, Server-Sitzung | MultiplayerService.Instance |
| Leaderboards | Punkteeinreichung, Ranglisten, Stufen, Versionsverlauf. Baustein: Bestenlisten | LeaderboardsService.Instance |
Telemetrie
| Paket | Zweck | Singleton / Einstiegspunkt |
|---|---|---|
| Analytics | Benutzerdefinierte Ereignisse, Standardereignisse, Einwilligungsverwaltung | AnalyticsService.Instance |
Architektur – Wie Pakete kombiniert werden
UnityServices.InitializeAsync()
│
▼
AuthenticationService
(Anmelden → PlayerId)
│
┌───────────────┼───────────────┐
▼ ▼ ▼
Remote Config Cloud Save Economy
(Spielkonfig., (Spielerzustand, (Währungen,
Definitionen, Fortschritt, Inventar,
Feature-Flags) Einstellungen) Käufe)
│ │ │
└───────┬───────┘ │
▼ │
Cloud Code │
(server-autorisierte │
Schreibvorgänge, ◄────────┘
Validierung,
Anti-Cheat-Logik)
│
┌───────┼───────┐
▼ ▼ ▼
Cloud Save Economy Bestenlisten
(Geschützte (Server- (Punktestand-
Schreibv.) vergabe) einreichung)
Wichtiges Prinzip: Für alle Daten, die die Spielintegrität beeinflussen (EP, Belohnungen, Währung), leiten Sie Schreibvorgänge über Cloud-Code-Module. Direkte Client-Schreibvorgänge sind nur für nicht sensible Daten (Einstellungen, Anzeigeeinstellungen) geeignet.
Kerndienste – Kurzreferenz
Authentifizierung
Paket: com.unity.services.authentication (>= 3.6.1)
Verwaltet die Spieleridentität. Anmeldemethoden: anonym, soziale Anbieter (Google, Apple, Steam, Facebook, Oculus usw.), Unity-Browser, Benutzername/Passwort und Gerätecode-Flow.
Nach der Anmeldung: PlayerId und PlayerName sind verfügbar. Alle Anmeldemethoden lösen das SignedIn-Ereignis aus. PlayerAccountService (für die Unity-Browser-Anmeldung) befindet sich in einer separaten Assembly (Unity.Services.Authentication.PlayerAccounts).
- Vollständige Referenz: references/authentication.md
- Baustein: Spielerkonto – vorgefertigte Anmeldeoberfläche und Identitätsverwaltung
Cloud Code
Paket: com.unity.services.cloudcode (>= 2.10.3)
Führt serverseitige C#-Module (.NET 9) für vertrauenswürdige Vorgänge aus. Module werden als .ccmr-Dateien bereitgestellt. Der Client ruft auf:
var result = await CloudCodeService.Instance.CallModuleEndpointAsync<TResult>(
"Modulname", "Funktionsname", args);
Bevorzugen Sie C#-Module gegenüber JavaScript-Skripten für die Produktion. Module unterstützen auch Echtzeit-Push-Nachrichten über Abonnements, ereignisgesteuerte Auslöser und die Bereichsbegrenzung von Multiplayer-Sitzungen.
- Vollständige Referenz: references/cloud-code.md
Cloud Save
Paket: com.unity.services.cloudsave (>= 3.4.0)
Pro Spieler Schlüssel-Wert-Speicher mit drei Zugriffsklassen sowie spielweiten benutzerdefinierten Daten:
| Zugriffsklasse | Lesen | Schreiben | Anwendungsfall |
|---|---|---|---|
| Standard | Besitzer | Besitzer | Private Einstellungen, Präferenzen |
| Öffentlich | Jeder | Besitzer | Öffentliche Profile, Anzeigenamen |
| Geschützt | Besitzer | Nur Server (Cloud Code) | Anti-Cheat-Daten, serververgebener Zustand |
| Benutzerdefiniert | Jeder Spieler | Nur Server | Gemeinsamer Spielzustand, globale Konfigurationen |
Werte werden als JSON serialisiert. Unterstützt Schreibsperre nebenläufigkeitskontrolle über SaveItem, serverseitige Abfragen über QueryAsync und binäre Dateispeicherung.
- Vollständige Referenz: references/cloud-save.md
- Bausteine: Verwendet von Errungenschaften