Mein erstes Multiplayer-Spiel mit Netcode für GameObjects erstellen

Mein Name ist Esteban Maldonado und ich bin Entwickler-Advokat für Unity. Mein Job ist es, die Botschaft über Unity Gaming Services zu verbreiten und neues Lehrmaterial zu erstellen, damit Entwickler mit den Werkzeugen für ihre eigene Multiplayer-Entwicklung beginnen können.
Eine dieser Lösungen ist Netcode for GameObjects (NGO), eine First-Party-Netzwerkbibliothek auf mittlerem Niveau, die für die Unity-Spiel-Engine entwickelt wurde. Eine Netcode-Lösung ist in jedem Multiplayer-Entwicklungsprojekt unerlässlich.
Eine der Aufgaben eines Entwickler-Advokaten bei Unity ist es, Beispielspiele zu erstellen, die unsere Werkzeuge präsentieren, und ein NGO-Beispiel wurde mir zugewiesen – Galactic Kittens.
Obwohl ich in der Spieleindustrie viele professionelle Aufträge hatte, habe ich persönlich wenig Erfahrung in der Erstellung von Multiplayer-Spielen – daher sollte dies nicht nur eine Lerngelegenheit für die Entwickler sein, die das Beispiel verwenden, sondern auch eine Lernerfahrung für mich, das Spiel überhaupt zu erstellen.
Zusammen mit meinem Team haben wir das Konzept von Galactic Kittens ausgearbeitet – das Schwierigkeitsniveau des Beispiels, die grundlegenden Mechaniken, die Charakterfähigkeiten (die später entfernt wurden) und mehr.
Um dieses Beispielspielprojekt anzugehen, habe ich mich mit dem talentierten Team von Bromio zusammengetan, um dieses Beispielspiel mit ausgefeilten Kunstressourcen, Musik und SFX sowie Programmierunterstützung zum Leben zu erwecken. Unser gemeinsames Ziel war es, Entwicklern eine einfache, anfängerfreundliche Einführung in den Bau eines Multiplayer-Spiels in Unity mit Netcode for GameObjects zu bieten.
In diesem Blog werde ich die Entwicklungsreise von Galactic Kittens vom Prototyp bis zur stabilen Veröffentlichung behandeln und wie Sie dieses Beispiel nutzen können, um Ihr eigenes Multiplayer-Projekt zu starten.
Bevor ich in die Entwicklung eintauche, hier ist ein kurzer Überblick über unser neues Beispielspiel Galactic Kittens. Dieses Beispiel ist ein 2D-Koop-Weltraumabenteuer, das Ihnen helfen soll, einige Grundlagen des Multiplayer-Netzwerks zu lernen.
Das Beispiel soll Ihnen notwendige Techniken beibringen, um mit der Multiplayer-Entwicklung zu beginnen, wie zum Beispiel:
- Netzwerksitzungsmanagement mit automatischem Szenenwechsel
- Grundlegende 2D-Bewegungssynchronisation, einschließlich Änderungen in Sprite-Blättern
- Erzeugen von Spielobjekten zur Laufzeit auf der Serverseite
- Übertragung des Eigentums der Hauptspieler vom Server zu seinem Client
- VFX-Erstellung über alle verbundenen Clients
- Wie man Soundeffekte und Musik an alle Clients abspielt
- Kommunikation von Spieler- und Spielstatistiken (Gesundheit, besiegte Feinde usw.) und deren Anzeige in der Benutzeroberfläche des Spiels
Sie können mehr über Galactic Kittens auf unserer Website erfahren oder das Beispiel direkt von GitHub herunterladen, um mit dem Erkunden des Codes zu beginnen.
Obwohl ich nicht viel Erfahrung mit der Erstellung von Multiplayer-Spielen hatte, gibt es viele öffentliche Ressourcen von Unity, die Benutzern helfen, mit NGO zu beginnen.
Mit diesen Ressourcen begann ich sehr einfach, indem ich mich mit grundlegenden Netzwerkconcepten und Terminologie vertraut machte, unter Verwendung unserer Unity Multiplayer Dokumentation. Als nächstes folgte ich den Hallo Welt Projekt-Tutorials und studierte verfügbare kleine Beispiele, um erste Ergebnisse zu erzielen.
Nach einigen Versuchen und Fehlern konnte ich einen einfachen Basisprototyp von Grund auf erstellen.

An diesem Punkt gab es keine benutzerdefinierte Lobby, keine echte Benutzeroberfläche, kein echtes Verbindungsmanagement – Sie verstehen das Bild. Der Prototyp bestand nur aus zwei gleichwertigen Schiffen (mit jeweils drei Trefferpunkten), die sich über den Bildschirm bewegten und einen Würfelgeschoss abfeuerten, wenn Sie die Leertaste drückten. Es war gerade genug, um das Spawnen von Objekten und die Bewegungssynchronisation über Clients zu zeigen.
Es war ein Anfang, aber ich wusste, dass Bromio uns helfen würde, die Ziellinie zu erreichen und dies in ein funktionierendes Beispiel zu verwandeln.
Nach meinem anfänglichen Fortschritt begann ich mit Bromio daran zu arbeiten, den Prototypen in etwas Produktionsbereites zu verwandeln. Wie ich hatten sie nicht viel Erfahrung mit der Erstellung von Multiplayer-Spielen, aber sie nahmen die Herausforderung an und halfen uns, unser Ziel zu erreichen.
Um effizienter zu arbeiten, zerlegten wir das Spiel in isolierte Komponenten, um die Entwicklung parallel zu starten – mit Künstlern, die an Assets arbeiteten, und Programmierern, die an der Kernlogik des Spiels arbeiteten.
Hier ist ein Blick auf die Entwicklung des Kunststils in Galactic Kittens.
In der Zwischenzeit entdeckten der Hauptentwickler von Bromio und ich lustige und herausfordernde Aspekte, um Galactic Kittens in ein funktionierendes Spielbeispiel zu verwandeln.
Eine der größten Herausforderungen in der Entwicklung war das Verbindungsmanagement und die Auswahl von Charakteren. Wir mussten die Daten der Charaktere in separaten ScriptableObject Dateien speichern, die Sie sehen werden, wenn Sie das Projekt herunterladen.
Diese Dateien enthalten die notwendigen Informationen über jeden Weltraumforscher, einschließlich welcher Sprites (Spieler und Schiff) in der Benutzeroberfläche angezeigt werden sollen und die Prefabs, die für jeden Spieler gespawnt werden sollen, sobald die Spielszenen beginnen.
Auf dem Bildschirm zur Auswahl der Charaktere war eine große Herausforderung, sicherzustellen, dass das Ereignis eines Client-Disconnects anerkannt wird und dieses Ereignis über die Benutzeroberfläche behandelt wird.
Wir haben entschieden, dass Benutzer nicht denselben Charakter auswählen dürfen, um zu zeigen, wie Entwickler dies tatsächlich in ihren eigenen Spielen tun könnten. (Es ist tatsächlich einfacher, Spielern zu erlauben, denselben Charakter auszuwählen, da es keine zusätzlichen Einschränkungen gibt.)

Die nächste Herausforderung für das Verbindungsmanagement war das Ereignis, dass Spieler mitten in einer Spielsitzung die Verbindung trennen. Das bedeutete nicht nur, dass das Spiel sich an das Verlassen der Spieler anpassen musste, sondern auch, dass andere Spieler daran gehindert werden mussten, während einer Spielsitzung einzutreten. Wir haben beschlossen, dass der Verbindungsmanager nur neue Verbindungen zulassen soll, während die Host-Instanz auf dem Bildschirm zur Auswahl der Charaktere ist. Dies ist keine universelle Lösung – andere Spiele erlauben es möglicherweise, dass Spieler spät in einer laufenden Sitzung beitreten, während andere Spiele dies möglicherweise nicht tun – es liegt an den Entwicklern zu entscheiden, was für ihr Erlebnis am besten ist.
Wir wollten das Gameplay einfach halten, ohne komplexe KI oder ausgefallene Verhaltenslogik für die Gegner oder Meteoriten, die die Spieler sehen. Auf diese Weise konnten wir ein vollständiges Spielbeispiel bereitstellen, ohne den Fokus darauf zu verlieren, den Benutzern zu zeigen, wie sie die NGO-Bibliothek verwenden können.
Daher gibt es zwei Haupttypen von Gegnern und ein Meteoritenhindernis:
Weltraum-Shooter Weltraum-Geist Meteoriten
Beide Gegner wählen ein zufälliges Bewegungsmuster, während der Weltraum-Shooter-Gegner der einzige ist, der tatsächlich zurückfeuert mit feindlichen Lasern. Bitte beziehen Sie sich auf unserenEntwicklerleitfaden für weitere Informationen darüber, wie diese Gegner aufgebaut sind und wie Sie Ihre eigene Logik hinzufügen können.
Als wir an dem Bosskampf arbeiteten, halfen uns alle Lektionen, die wir beim Implementieren der Lobby, dem Verhalten der Spieler-Raumschiffe und einfachen Gegnern gelernt hatten, schnell das endgültige Bosskampf-Erlebnis zu erstellen.
Eine besondere Herausforderung war das Timing des Warnalarms, den man hört und sieht, bevor der Boss eintritt. Am Ende sendeten wir Ereignisse mit Client- und Server-RPCs, um zu signalisieren, dass das reguläre Spielerlebnis vorbei war und der finale Bosskampf kurz bevorstand.

Das Verhalten des Bosses ist als endlicher Zustandsautomat (FSM) strukturiert, der zufällig auswählt, welches Angriffsschema er auf die verbundenen Spieler werfen soll. Dazu verwendeten wir eine C#-Klasse namens BossController, die den Übergang von einem Bosszustand zum anderen verwaltet. Überprüfen Sie den Entwicklerleitfaden für Informationen über den Code hinter diesem Kampf und wie Sie Ihre eigenen Bosszustände hinzufügen können.
Die #1-Ressource, die uns geholfen hat, unsere Mission, dieses Beispielspiel zu erstellen, erfolgreich zu erfüllen, war der Beitritt zum Unity Multiplayer Networking Discord-Server und das Stellen von Fragen an die Community. Hier konnten wir tatsächlich mit anderen Entwicklern sprechen, die Multiplayer-Spiele erstellen, und auch mit den Entwicklern der Unity-Multiplayer-Dienste sprechen. Der kollektive Wissenspool war mehr als genug, um uns zu helfen, die Ziellinie zu erreichen.
Bei Unity zu arbeiten bedeutet, dass ich mit netzwerkaffinen Menschen zusammenarbeiten kann, die hart daran arbeiten, hilfreiche Ressourcen und Dokumentationen zu entwickeln, die darauf ausgelegt sind, jedem den Einstieg in die Multiplayer-Entwicklung zu erleichtern. Die Unity-Multiplayer-Dokumentationsseite war viele Male nützlich – vom Vertrautmachen mit grundlegenden Netzwerktechnologien bis hin zu Umgang mit Latenz bis hin zu tatsächlichem Codieren mit NGO.
Wir sind auf jeden Fall begeistert von Galactic Kittens. Wir möchten, dass Sie und zukünftige NGO-Nutzer dieses Beispiel als Schritt in die richtige Richtung auf Ihrer Reise zum Multiplayer-Lernen nutzen. Bitte zögern Sie nicht, im Discord-Server oder in den Foren Fragen zu stellen oder Feedback und Vorschläge zu geben.
Eines der Dinge, die ich unbedingt lernen möchte, ist, wie man Objekt-Pooling zu einem Multiplayer-Spielbeispiel hinzufügt. Dies ist die Technik, die es Ihnen ermöglicht, den erforderlichen Speicher für Objekte, die während einer Spielsitzung wiederholt erzeugt werden, im Voraus zuzuweisen. In einem früheren Experiment habe ich diese Technik in einem Offline-Unity-Projekt ausprobiert, und sie kann definitiv die Laufzeiteffizienz Ihres Spiels verbessern. Wir haben diese Technik auf Boss Room und andere UGS-Beispiele angewendet.
Wenn Sie Ihre eigene Multiplayer-Reise beginnen, gibt es viele Ressourcen, die mein Team bei Unity bereitstellt, um es Ihnen zu erleichtern.
Ich würde empfehlen, auf der Netcode für GameObjects-Seite zu beginnen, wo Sie sich mit dem Paket vertraut machen können. Als Nächstes können Sie NGO durch das Galactic Kittens Beispiel erkunden oder kleine Schritte mit kleinen Beispielen machen.
Sobald Sie auf Ihrer Reise sind, empfehle ich, dem Unity Multiplayer Networking Discord-Server beizutreten und die Foren zu besuchen. Und wenn Sie das Gefühl haben, dass Galactic Kittens zu einfach oder nicht herausfordernd genug ist, würde ich Sie auf jeden Fall ermutigen, sich Boss Room, anzusehen, das ein vollständiges 3D-Beispielspiel ist, das die NGO-Entwicklung auf ein produktionsbereites Niveau bringt.
Um Ihr Spiel online zu bringen, kann Unity Gaming Services Ihnen noch weiterhelfen – egal, ob Sie die Lobby oder Matchmaker Dienste, Sprach- und Textchat mit Vivox oder sogar Hosting-Lösungen wie den P2P Relay Dienst oder Game Server Hosting suchen. Viel Spaß beim Erstellen!
Um mehr über aktuelle Trends und die Zukunft des Multiplayers zu erfahren, lesen Sie den 2022 Unity Multiplayer Report, der die Ergebnisse von über 1.500 Umfrageantworten aus den USA, dem Vereinigten Königreich, Japan und Korea aggregiert.
