Multiplayer Anwendung in Unity erstellen – Mirror Networking

Gefällt Dir der Artikel? Dann teile ihn doch, um diese Informationen auch anderen zugänglich zu machen!

Seiteninhalt

Für das Erstellen von Multiplayer Anwendungen in Unity gibt es verschiedene Lösungen. Eine äußerst beliebte ist die Open-Source-Lösung Mirror Networking. Ganz egal ob die Sitzung im lokalem Netzwerk oder über das Internet stattfinden soll.

Ich zeige dir wie du die Mirror in dein Projekt einbindest und deinen eigenen Netzwerk-Manager für den Austausch von Daten programmierst. Mit zufälligen Spawnpoints lassen wir unsere Spieler über das Netzwerk erscheinen und synchronisieren die Bewegung der einzelnen Spieler.

Am Ende hast du die Grundlagen für den Umgang mit Mirror in Unity erlernt und kannst das erstellte Projekt als Basis für deine eigenen Anwendungen verwenden.

Was ist Mirror?

Mirror ist eine Open-Source-Community-Lösung um Unity Multiplayer Anwendungen zu realisieren. Es zeichnet sich durch eine kleine Codegröße, die dem KISS-Prinzip (keep it simple, stupid) folgt, was das Debuggen oder Erweitern um neue Funktionen erleichtert. Damit gilt Mirror als einsteigerfreundlich und ist zudem als kostenfreie Erweiterung im Asset-Store erhältlich.

Vergleicht man aber Mirror mit anderen Lösungen wie beispielsweise Photon Unity Networking, dann muss dir ein wichtiger Unterschied bewusst sein.

Das Hosting eines Mirror-Servers im Internet ist mit etwas Aufwand verbunden. Grundsätzlich gibt es zwei Möglichkeiten. Die erste Möglichkeit ist, einen der Spiel-Clients auch als Server agieren zu lassen. Dies bringt aber die Probleme von P2P mit sich. Bei Photon Unity Networking kann man direkt auf die Infrastruktur von Photon zurückgreifen und muss keinen eigenen Server hosten.

Die andere Option wäre, deinen Spielserver als Headless Unity-Client bei einem Cloud-Anbieter wie:

  • AWS (Amazon Web Services)
  • Azure (Microsoft Azure)
  • GCP (Google Cloud Platform)

zu hosten.

Du kannst deine Anwendung auch im lokalen Netzwerk betreiben und musst dich somit nicht um das Hosting kümmern, denn alle Clients können per lokaler IP-Adresse dem Spielgeschehen beitreten. Auf genau diese Weise testen wir auch unsere Mehrspieler-Logik während dieses Videokurses.

Mirror importieren

Wir starten mit einem neuen Unity Projekt. Ich verwende das 3D Template in diesem Videokurs. Im nächsten Schritt importierst du die Mirror für Unity Erweiterung. Diese findest du im Unity Asset Store unter: https://assetstore.unity.com/packages/tools/network/mirror-129321

Klicke auf den „Add to My Assets“ Button und es öffnet sich dadurch der Package Manager und du kannst Mirror herunterladen.

Erweiterung Mirror in Unity importieren

Klicke auf den Download Button um es auf deine Festplatte herunterzuladen. Danach wählst du den Import Button um alle Dateien in dein Unity Projekt zu importieren.

Damit hast du jetzt die Mirror Erweiterung zu deinem Projekt hinzugefügt und kannst sie verwenden.

Download Unity Asset Mirror

Beispiel testen

Nach dem Import von Mirror hast du die Möglichkeit verschiedene Beispiele anzusehen. Begebe dich dazu in den Ordner Assets > Examples > Pong > Scenes und öffne die Scene. Klicke auf den Play-Button um die Scene zu starten.

Beispiel testen

In der linken oberen Ecke erhältst du verschiedene Buttons für den Einstieg in die Multiplayer-Anwendung.

  • Server Only: Das Endgerät auf dem die Anwendung läuft fungiert nur als Server und nimmt selbst nicht am Spielgeschehen Teil, andere können Teilnehmen
  • Host (Server + Client): Wir starten einen Server, nehmen aber auch am Spielgeschehen teil
  • Client: Wir verbinden uns mit einem vorhandenen Server. Treten also einem Server bei. Localhost steht in diesem Fall für unsere eigene IP Adresse.

Teste die Anwendung indem du auf Host klickst. Dadurch erstellst du eine Serverinstanz und trittst automatisch bei. Du siehst auch einen Spieler der über die Tasten W-S gesteuert werden kann. Das Problem dabei, wir benötigen einen zweiten Spieler um es zu testen.

Dazu muss das Spiel exportiert werden. Wir testen es auf dem Computer, also exportiere es für Windows, Mac oder Linux. Entsprechend deinem Betriebssystem. Ich arbeite unter Windows also exportiere ich die Anwendung als *.EXE-Datei.

Spiel exportieren

Speichere es z.B. in einen Build-Ordner ab und öffne die .EXE Datei mit einem Doppelklick. Danach springst du zurück in den Unity Editor, klickst auf den Play-Button und wählst Host. Bei der Windows Anwendung wählst du Client und verbindest dich. Du musst hier keine IP-Adresse eingeben, denn beide Spieler befinden sich auf dem gleichen Computer.

Schon startet das Spiel und du kannst mit dem Unity Editor und der Windows Anwendung den jeweiligen Spieler steuern. Sobald du in Unity die Anwendung stoppst, verliert der andere Spieler auch die Verbindung, da der Server nicht mehr existiert.

Network Manager

In diesem Abschnitt sehen wir uns den Network Manager genauer an. Er ist für die Kommunikation der einzelnen Clients zuständig. Erstelle dir eine neue Scene. In deiner Hierarchie erstellst du dir ein neues leeres GameObject und nennst es „NetworkManager“. Füge eine neue Component hinzu und wähle „NetworkManager“.

Unity Network Manager Component hinzufügen

Achte darauf, dass DontDestroyOnLoad aktiviert ist. Somit bleibt dieses GameObject auch Szenenübergreifend aktiv. Unter Network Info findest du die Einstellungen für den Datenaustausch von Server und Clients. Hier findest du auch beispielsweise die Anzahl der Spieler. Hier verlinken wir dann auch unser Player Prefab, das wir im nächsten Schritt erstellen werden.

Der NetworkManager ist ein durch die Mirror Erweiterung bereitgestelltes Skript. Du kannst es dir im Detail ansehen, wenn du das Skript in deinem Code Editor öffnest.

Hier werden alle Parameter und Methoden die du verwenden kannst im Detail definiert. Keine Sorge, du musst den Inhalt nicht verstehen, wir bauen darauf auf und benötigen nur einen kleinen Teil davon.

Parameter  und Methoden Network Manager

Spieler erstellen

Neben dem NetworkManager benötigst du auch einen Spieler. Erstelle dir über die Hierarchie ein neues GameObject mit dem Namen „Player“. Zu diesem GameObject fügst du die NetworkIdentity Component hinzu. Mit dieser neuen Component erhält unser GameObject eine ID im Netzwerk und es kann somit durch den Server verwaltet werden. Ordne dem Player einen Cube unter, damit wir die einzelnen Spieler auch in der Scene View sehen können. Später kannst du hier dein eigenes 3D Model oder 2D Sprite hinzufügen.

Network Manager Spieler erstellen

Du möchtest in deiner Multiplayer-Anwendung sicherlich nicht nur einen Spieler haben. Es soll für jeden Spieler der dem Server beitritt ein Objekt erscheinen. Daher erstellen wir aus dem Player GameObject jetzt ein Prefab. Erstelle dir einen Prefab Ordner und füge hier das Player GameObject ein. Danach kannst du das Player GameObject aus der Hierarchie entfernen, denn wir verlinken es im NetworkManager.

Selektiere den NetworkManager und wähle in der NetworkManager Component bei Player Object dein eben erstelltes Player Prefab.

Die Checkbox „Auto Create Player“ bedeutet, dass für jeden Client automatisch ein Player Object erstellt wird. Wenn du dies deaktivieren würdest, dann könntest du per Skript selbst entscheiden was nach dem Beitritt passieren soll.

Network Manager Component auswählen

Network Manager HUD

Damit dir auch beim Starten der Anwendung die Buttons zum Beitreten oder Erstellen eines Servers angezeigt werden, musst du eine weitere Component zu deinem NetworkManager GameObject hinzufügen. Selektiere den NetworkManager in der Hierarchie und füge das NetworkManagerHUD Skript hinzu.

Network Manager HUD Component

Klicke danach auf den Play-Mode in Unity und in der linken oberen Ecke hast du jetzt die Buttons. Klicke auf Host und dein Player erscheint. Am besten testest du das jetzt auch mit einer exportieren Anwendung um mehrere Spieler zu sehen. Bevor du die Anwendung exportierst, aktiviere am besten den Fenstermodus in den Projekt-Settings. Damit ist es für dich einfacher das Fenster zu schließen oder auch zu verschieben.

Network Manager Window Screen Size

Achte beim Export darauf, dass du die richtige Scene im Build Window hinzugefügt hast. Starte die Anwendung und trete dem Server bei.