Multiplayer Anwendungen in Unity erstellen – Photon (PUN)

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

Seiteninhalt

Damit du dein eigenes online Mehrspielerspiel mit Hilfe der Unity Engine programmieren kannst, musst du zuerst einmal verstehen wie ein solches aufgebaut ist. Unity bringt bereits eine Erweiterung namens „Unity Networking“ mit sich, jedoch werden wir in unserem Beispiel die Alternative „Photon“ verwenden. Photon ist eine Unity Erweiterung von ExitGames und gilt als eine der Besten Lösungen um sein Spiel onlinefähig zu machen.

Erste Schritte

Öffne ein neues Unity Projekt und begebe dich in den Asset Store. Hier suchst du nach „Photon Unity Networking Free“ und importierst dieses Package in dein Projekt. Danach erstellst du dir unter der offiziellen Webseite von Photon ein kostenfreies Benutzerkonto und legst über den Button „Create a new App“ eine neue Anwendung an. Nachdem die Anwendung in deinem Dashboard erstellt wurde, kannst du die App ID kopieren und in Unity in das Photon Setup Wizard feld einbinden.

Serverlogik

Im Ordner „Demos“ findest du erstellte Beispiele von ExitGames. Hier lässt sich auch bereits ein 2D Jump and Run mit fertig erstellter online Verbindung testen. Sobald du deine App ID hinterlegt hast, kannst du die Anwendung in Unity starten und dein Spieler erscheint in der Spielwelt. Wenn du noch einen zweiten Spieler mit ins Spiel holen möchtest, dann empfiehlt sich das Spiel für dein Betriebssystem über „File“ > „Build“ zu exportieren und mehrmals zu starten.

Bevor wir jetzt innerhalb unseres Unity Projekts eine Verbindung zum Server und zur Lobby erstellen, werde ich dir die Logik von einem Online Multiplayer Spiel in Unity mit Photon genauer erklären. Wir haben auf der einen Seite unseren Spieler und der Spieler möchte sich mit dem Server verbinden. Dies passiert wenn er beispielsweise auf den Button “Multiplayer spielen” klickt. Dadurch wird eine Methode zur Serververbindung aufgerufen. Der Server ist der so genannte MASTER. Mit dem Master verbindet sich nicht nur Spieler 1 sondern auch alle anderen Spieler die unser Online Multiplayer Spiel spielen, vollkommen unabhängig davon ob diese dann gemeinsam in einem Raum zusammen Spielen.

Nachdem die Spieler dem Server beigetreten sind, landen diese in der Lobby. Die Lobby listet alle möglichen Räume auf, der Spieler erstellt einen neuen Raum, wählt einen bestehenden oder wird automatisch verbunden.

unity-photon-serverlogik.png (525 KB)

Serverlogik

In unserem Beispiel werden wir die simpelste der beschriebenen Szenarien programmieren: Der Spieler tritt automatisch einem Spiel bei, ist kein Spiel vorhanden wir eines erstellt.

Auf der Webseite von Photon gibt es einen Matchmaking Guide welcher die Lobby Thematik genauer beschreibt, lass dich davon aber nicht entmutigen, die meisten Befehle benötigen wir für unser erstes online multiplayer spiel sowieso nicht.

Verbindung zum Server

Im letzten Video haben wir gelernt welche drei Instanzen für den Spieler beim Betreten eines Spiels vorhanden sein müssen. In diesem Video kümmern wir uns um die Erste davon und zwar um das Beitreten des Servers. Dazu erstellst du in Unity ein neues Panel mit einem Button. Denn nach dem Spielstart soll der Spieler entscheiden ob er überhaupt den Online Multiplayer Modus spielen möchte. Mit dem Bestätigen des Buttons wird die Anfrage an den Server gesendet. Doch wie sendest du nun überhaupt diese Anfrage?

unity-photon-verbindung-zum-server-online-mehrspieler-programmieren.png (188 KB)

Verbindung zum Server

Erstelle dir zuerst ein neues C#-Skript mit dem Namen “NetworkManager” und ein leeres GameObject “NetworkManager”.

				
					using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NetworkManager : MonoBehaviour {

	// Methode um Serververbindung zu starten
	public void Connect()
	{
		PhotonNetwork.ConnectUsingSettings ("v01");
	}

	void Update()
	{
		// Ausgabe des aktuellen Serverstatus
		Debug.Log(PhotonNetwork.connectionStateDetailed.ToString ());
	}
	
	void OnConnectedToMaster()
	{
		PhotonNetwork.JoinLobby ();
	}

	void OnJoinedLobby()
	{
		// Lobby panel anzeigen
		lobbyPanel.SetActive (true);
	}

	public void ButtonJoinRoom()
	{
		// Raum betreten
		PhotonNetwork.JoinRandomRoom();
	}

	void OnPhotonRandomJoinFailed()
	{
		PhotonNetwork.CreateRoom ("myRoom");
	}

	void OnJoinedRoom()
	{
		lobbyPanel.SetActive (false);

	}
	
	void Spawn()
	{
		if (PhotonNetwork.player.ID == 1) 
		{
			PhotonNetwork.Instantiate ("Player", Vector3.zero, Quaternion.identity, 0);	
		} else 
		{
			PhotonNetwork.Instantiate ("Player", new Vector3(0,2,0), Quaternion.identity, 0);	
		}

	}
}
				
			

Damit du nun auch siehst was der aktuelle Serverstatus ist, lassen wir uns diesen im Detail in unserer Unity-Konsole ausgeben. Wie du siehst die Ausgabe zeigt nun den Status an, jedoch können wir uns nicht Verbinden, da wir erst einen Button erstellen müssen und über diesen Button rufen wir die Connect() Methode des NetworkManager Skripts auf.

unity-photon-singleplayer-multiplayer.png (110 KB)

Network Manager

Mit dem Starten der Szene gelangen wir über den Button zur Connect() Methode und verbinden uns so mit dem Master Server. Unser Spiel bleibt nun aber stehen, eigentlich sollten wir nach dem Verbinden eine andere Ansicht bekommen, denn die Szene zeigt aktuell immer noch die beiden Buttons aus dem Hauptmenü an. Die Connect Befehle der Photon Engine haben jeweils eine Callback Funktion. Im Falle von Connect können wir über OnConnectedToMaster() auf die Rückmeldung warten und dann sofort reagieren.

Ab in die Lobby

Im letzten Kapitel konnten wir uns über einen Button direkt mit dem Server verbinden. In diesem treten wir nun einer Lobby bei. Die Lobby ist die zweite Instanz in der Server-Logik von Photon. Wir werden hier keine speziellen Einstellungen vornehmen. Auf dieser Webseite findest du aber verschiedene Beispiele, wofür du die Lobbyeinstellungen verwenden kannst. Unter anderem auch um Skillgruppen oder Gamemodes zu unterscheiden und festzulegen.

Nachdem wir also die Rückmeldung vom Master-Server bekommen haben, starten wir den Befehl zum Betreten der Lobby. Dieser wird mit PhotonNetwork.JoinLobby(); ausgeführt. Auch hier erhalten wir nach dem erfolgreichen Verbinden eine Rückmeldung und du kannst diese mit OnJoinedLobby() abfangen.

Dadurch sind wir nun erfolgreich der Lobby beigetreten.

Raum erstellen / Raum betreten

Mit Hilfe der Methode JoinRandomRoom() wird dein Spieler einem beliebigen Raum betreten. Das Problem dabei ist nur, was passiert wenn ich der erste Spieler in der Lobby bin der einem Raum betreten möchte und dadurch noch keine Räume vorhanden sind?

Genau diesen Fall müssen wir betrachten, mit Hilfe der Methode OnPhotonRandomJoinFailed() bekommen wir diesen Hinweis und können dadurch über CreateRoom() einen neuen Raum erstellen.

Spieler spawnen lassen

Nachdem wir nun vollständig mit dem Server und unserem Raum verbunden sind, werden wir im nächsten Schritt ein Objekt, das unseren Spieler darstellen soll erscheinen lassen. Bevor wir uns jetzt aber um den Spawn kümmern zeige ich dir wie du die Anzahl der Spieler in einem Raum ausgeben lassen kannst. In den Update Bereich schreiben wir eine neue Zeile Code:

Debug.Log(PhotonNetwork.otherPlayers.Length);

Danach exportieren wir unser Spiel erneut, dadurch kannst du es mit mehreren Spielern testen.

Kommen wir nun zum Spawn. Der Spawn soll ausgeführt werden sobald wir mit dem Raum verbunden sind. Durch die Rückmeldung OnJoinedRoom() wissen wir, dass wir erfolgreich mit einem Raum verbunden sind. Das heißt für uns, innerhalb dieser Methode rufen wir das Spawn() auf. Zum aktuellen Zeitpunkt verfügen wir jedoch noch nicht über eine Spawn Methode. Legen wir also diese zuerst einmal an.

Ein GameObject mit dem Namen Player haben wir bisher noch nicht. Erstelle innerhalb deines Assets Ordner einen Resources Ordner und hier einen Würfel mit dem Namen Player. Die eben erstellte Methode noch im Rumpf der OnJoinedRoom()-Methode aufrufen und schon kannst du dein Spiel testen. Wie du siehst erscheint nun unser Spieler. Doch wie sieht dies aus, wenn wir einen weiteren Spieler spawnen lassen. Dazu kannst du deine Anwendung exportieren und auf diese Weise mehrmals starten.

Nützliche Links

Hinweis: Du möchtest eigene 2D/3D Spiele und Anwendungen erstellen? Dann teste jetzt nobreakpoints Pro. Dort findest du in verschiedenen Online-Kursen und Workshops das nötige Wissen, um deine Ideen in die Wirklichkeit umzusetzen.

Free

Trial

Keine Extra-Kosten.
Jederzeit kündbar.

Bist du bereit atemberaubende Spiele und 3D Anwendungen zu erstellen?

*Nach 1 Monat wird die Mitgliedschaft automatisch auf monatlicher Basis zum Premium-Preis verlängert, bis du kündigst. Angebot kann nur einmal pro Nutzer beansprucht werden.

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

Weitere Blogartikel

Bist du bereit deine eigenen Spiele & Apps zu erstellen?

Teste jetzt alle Online-Kurse mit nobreakpoints Pro und erstelle problemlos deine eigenen 2D/3D Spiele und XR Anwendungen.

Suche

Bist du bereit deine eigenen Spiele & Apps zu erstellen?

Teste jetzt alle Online-Kurse mit nobreakpoints Pro und erstelle problemlos deine eigenen 2D/3D Spiele und XR Anwendungen.