Dokumentation - Software
Transcription
Dokumentation - Software
SOMMERSEMESTER 2014 - F. JOCHUM, D. BUDERUS, M. REITANO Dokumentation Wahlpflichtfach C.I.T.Y. – Projekt Multiplayer SANDER BUCHHEIM - 11091861 KEVIN SCHALA - 11090182 OLIVER STEINLE - 11075943 Stand: 1 Juli 2014 Abgabe: 02.07.2015 INHALTSVERZEICHNIS 1 Einleitung 3 1.1 C.I.T.Y - Hauptprojekt 3 1.2 Multiplayer - Teilprojekt 3 2 Netzwerk - Allgemein 4 2.1 Was ist ein Netzwerk? 4 2.2 Netzwerk-Techniken 4 2.2.1 Authoritative Server 4 2.2.2 Non-Authoritative Server 5 2.3 Netzwerk-Kommunikation Dokumentation | 01.07.2014 2.3.1 1 State Synchronization 5 5 2.3.1.1 Interpolation 6 2.3.1.2 Extrapolation 6 2.3.2 Remote Prozedure Calls 6 2.3.3 Netzwerkbandbreite minimieren 6 3 Netzwerk – Unity3D 8 3.1 Netzwerk-Elemente 8 3.1.1 Erstellen eines Servers 8 3.1.2 Verbinden mit ein em Server 8 3.1.3 Kommunizieren mit einem Client/Server 8 3.1.4 Senden/Empfangen von RPC‘s 9 3.1.5 State Synchronization 9 3.1.6 Netwerkbandbreite minimieren 10 3.2 Masterserver 11 3.2.1 Anmelden eines S ervers 11 3.2.2 Abmelden eines S ervers 12 3.2.3 Abrufen einer Serverliste 12 3.3 Problem: Cheaten 12 4 Third – Party Assets 14 4.1 Network – Assets 14 4.1.1 Photon 14 4.1.2 TNet: Tasharen Networking 14 5 Umsetzung - Konzept 16 5.1 Einführung 16 5.2 Netzwerkmodell 16 5.3 Netzwerkkommunikation 17 5.3.1 Portöffnung 17 5.3.2 Host - Masterserver 17 5.3.3 Client - Masterserver 18 5.3.4 Client - Host 18 5.4 Interfaces 19 5.5 Spielmodi 21 5.5.1 Allgemein 21 5.5.2 Fangen 21 5.5.3 Last Man Standing 21 5.5.4 Räuber und Gendarm 21 Chat 22 5.6.1 Textbasiert 22 5.6.2 Sprachbasiert 22 6 Umsetzung – Implementierung 23 6.1 Entwicklung 23 6.1.1 Komponentenübersicht 24 6.2 Fazit 24 7 Literaturverweis 25 8 Glossar 26 Dokumentation | 01.07.2014 5.6 2 1. EINLEITUNG 1.1 C.I.T.Y. - Hauptprojekt C.I.T.Y. (Computer Integrated Training for Young urban people) ist ein interaktives Lernspiel zum Thema „Leben in der Stadt“ in einer virtuellen 3D-Umgebung. Dieses soll den Umgang mit der Umwelt im Alltag (z.B.: Nutzung von öffentlichen Verkehrsmitteln) dem Spieler lehren. Realisiert wird dieses Spiel mit der Unity3D Engine, sowie der unterstützten Programmiersprache C#. 1.2 Multiplayer - Teilprojekt In dieser (Teil-)Arbeit wird eine Multiplayer-Umgebung erarbeitet und aktuelle Arbeitsschritte der Entwicklung dokumentiert. Hierbei handelt es sich um ein Konzept, das die einzelnen Module beschreibt, um ein Multiplayer-System umzusetzen. Dokumentation | 01.07.2014 Die Multiplayer-Umgebung soll die Möglichkeit bieten zusammen mit anderen Spielern die Umwelt zu erforschen und gemeinsam verschiedene Spiele zu spielen. 3 2. NETZWERK - ALLGEMEIN 2.1 Was ist ein Netzwerk Ein Netzwerk ist die Verbindung zweier oder mehrerer Computer zur Kommunikation untereinander. Normalerweise bildet man ein Netzwerk zwischen einem Client und einem Server, wobei dieser unter Umständen auch als Client agieren kann. Hat der Client sich mit dem Server verbunden, also ein Netzwerk erstellt, kann dieser direkt mit dem Server (oder umgekehrt) kommunizieren. 2.2 Netzwerk - Techniken Bei der Erstellung, bzw. bei der Strukturierung eines Netzwerkes kann in zwei verschiedene Netzwerk-Techniken gegliedert werden. 2.2.1 Authoritative Server Authoritative Server berechnen die Welt-Simulation, Anwendung von Spielregeln und Physiken anhand der Client-Inputs, wie Tastatureingaben oder Maus-Klicks selbst. Das heißt der Client sendet nur Eingaben an den Server. Der Server wiederum berechnet die Zustände der Objekte selbst und gibt diese zurück. Eine eigene Berechnung der Objektzustände findet auf dem Clienten nicht statt. Ein Vorteil des Authoritativen Servers, bzw. der Berechnung der Objektzustände auf dem Server, ist das verhindern des sogenannten cheaten. Des Weiteren bekommen durch diese Technik alle Clients dieselben Ansichten der Umgebung, wie beispielsweise bei Anwendungen von Physiken. Diese würden, wenn die Anwendung auf den Clients selbst stattfinden würde, variieren. Eine mögliche Lösung dieses Problems, wäre eine sogenannte „client-side prediction“, d.h. der Client berechnet zunächst die Objektzustände selbst, erhält aber bei Bedarf vom Server Korrekturen, was das Problem der hohen Verzögerung umgehen würde. Ein weiterer Punkt ist bei Authoritative Server die benötigte Prozessorleistung. Da die kompletten Berechnungen auf dem Server stattfinden, muss der Server über genügend Leistung verfügen um alle Eingaben der Clients zu bearbeiten und zurückzusenden. Dokumentation | 01.07.2014 Hauptnachteil der Authoritative Server ist die Verzögerung der Client-Inputs. Wenn diese den Server erreichen, müssen die Ergebnisse zunächst berechnet werden und anschließend zurückgesendet werden. Dadurch geht viel Zeit verloren, bis etwas auf dem Client geschieht. 4 2.2.2 Non-Authoritative Server Non-Authoritative Server sind, wie der Name vermuten lässt, das Gegenstück der Authoritative Server. Eine Berechnung der Objektzustände findet hier nur auf den Clients statt. Diese Senden nur ihre Aktionen und Objekte an den Server und dieser wiederum an die verbundenen Clients. Vorteile des Authoritative Servers gehen damit verloren, ermöglichen aber eine höhere Performance der Multiplayer-Umgebung. 2.3 Netzwerk - Kommunikation Um eine Netzwerk-Kommunikation zu ermöglichen, müssen sich Client und Server zunächst verbinden. Hierbei können allerdings Probleme auftreten, wie zum Beispiel eine blockierende Firewall, oder die Auflösung einer privaten IP-Adresse, da diese nicht durch das Internet erreichbar ist. Lösung bietet das sogenannte „NAT punchtrough“- Verfahren, welches in Unity3D implementiert ist. Hierbei wird zunächst ein Aufruf vom Client mit der privaten IP-Adresse an den Server gegeben, der dadurch die öffentliche IP-Adresse mit dem Port erfährt und so den vorgeschalteten Router sozusagen umgehen kann und eine Kommunikation ermöglicht. Zur eigentlichen Kommunikation der Clients mit dem Server bieten sich zwei verschiedene Grund-Verfahren an: 2.3.1 State Synchronization Dokumentation | 01.07.2014 State Synchronization wird benutzt um kontinuierlich verändernde Objekte auf den Clients synchron zu halten. 5 Zum Beispiel können hiermit die „Transforms“ (Position, Skalierung und Rotation) eines Objekts, sowie seines RigidBody - wenn vorhanden - serialisiert werden. Auch kann hiermit die Animation eines Objektes synchronisiert werden. State Synchronization benötigt allerdings eine hohe Bandbreitennutzung, weshalb die eigentlichen Daten, so gering wie möglich gehalten werden sollen. Des Weiteren bietet die State Synchronization in Unity3D Funktionen zur Inter-/Extrapolation an. 2.3.1.1 Interpolation Ein Client erhält in der Regel 15 Momentaufnahmen pro Sekunde. Wenn die Objekte nur an dieser Stelle dargestellt werden, an denen sie zuvor vom Server festgestellt wurden, würden die Animationen abgehackt aussehen. Der Effekt vergrößert sich bei verlorenen Datenpaketen. Um diesem Problem vorzubeugen, benutzt man für das Rendern die Interpolation von Objekten. Mit dieser Technik geht man beim Rendern der Positionen und Animationen in die Zeit zurück und vergleicht die Position von zwei Momentaufnahmen, um damit eine flüssige Animation darstellen zu können. Mit 15 Momentaufnahmen die Sekunde erhält der Client alle 50 ms ein Snapshot von der Spielewelt, also müsste mindestens eine Verzögerung von 50 ms eingeplant werden, damit man zwei Datenpakete für die Interpolation benutzen kann. Für den optimalen Einsatz empfiehlt es sich die Verzögerung zu verdoppeln, um noch ein Datenpaket im Speicher zu haben, falls ein Datenpaket verloren gegangen ist. 2.3.1.2 Extrapolation Für den Fall, dass mehr als ein Datenpaket fehlt, kann der Renderer versuchen, mit Hilfe der Extrapolation die Position des Objektes darzustellen. Diese Vorausberechnung basiert auf Daten aus älteren Datenpaketen. Die Extrapolation sollte nur für einen kleinen Zeitraum benutzt werden, da sonst der Fehler bei der Vorhersage zu groß wird. 2.3.2 Remote Procedure Calls Remote Procedure Calls (RPC) ermöglichen den Aufruf von Funktionen auf einem anderen Computer. Sie eignen sich besonders für Events zwischen allen und/oder einzelnen Clients eines Servers, wo keine kompletten Objekte synchronisiert werden müssen. Durch die RPC – Modes kann der Empfänger bestimmt werden. Folgende RPC Modes gibt es: RPC.Mode.All – Daten werden zu allen übermittelt RPC.Mode.AllBuffered – Daten werden zu allen übermittelt und wird zum Buffer hinzugefügt RPC.Mode.OthersBuffered – Daten werden zu allen, bis auf dem Sender, übermittelt und wird zum Buffer hinzugefügt Dokumentation | 01.07.2014 2.3.3 RPC Modes 6 RPC.Mode.Others – Daten werden zu allen, bis auf dem Sender, übermittelt Dokumentation | 01.07.2014 RPC.Mode.Server – Daten werden nur zum Server übermittelt 7 3. NETZWERK - UNITY3D 3.1 Netzwerk - Elemente Die Unity3D-Engine bietet von Haus aus alle benötigten Funktionen für eine Umsetzung einer Multiplayer-Umgebung. Anhand von kurzen Beispielen sollen hier nun kurz die Funktionen erklärt werden. Eine vollständige Dokumentation der Funktionen lässt sich in der Scripting API der Unity3DEngine finden. 3.1.1 Erstellen eines Servers Um einen Server zu erstellen, muss innerhalb eines Scripts, die Funktion: Network.InitializeServer(int connections, int listenPort, bool useNAT); aufgerufen werden. Damit ist der Server initialisiert und bei richtiger Konfiguration für Clients erreichbar. 3.1.2 Verbinden mit einem Servers Um einen Client mit einem Server zu verbinden, wird folgende Funktion benutzt: 3.1.3 Kommunizieren mit einem Client/Server Um mit einem Server oder Clienten zu kommunizieren, müssen an entsprechenden Stellen, sogenannte Network Views an die GameObjekte angehangen werden um RPC‘s oder State Synchonization zu ermöglichen. Dokumentation | 01.07.2014 Network.Connect(string serverIP, int remotePort, string passwort); 8 3.1.4 Senden/Empfangen von RPC’s Eine Funktion wird in Unity3D mit dem RPC Attribute für RPC‘s zugänglich gemacht: [RPC] public int sum(int x, int y){ return x + y; } Diese Funktion kann anschließend mit: networkView.RPC(“sum“, RPCMode.All, 1, 2); aufgerufen werden. Hierbei kann zudem entschieden werden, an wen dieser RPC gesendet wird (hier RPCMode.All). Unity3D bietet zudem die Möglichkeit der Pufferung von RPC’s(RPC’s werden in dem Fall in einen Buffer gesteckt), damit im Nachhinein verbundenen Spieler die vorangegangenen RPC‘s auch erhält, wie beispielsweise eine Veränderung der Ausrüstung eines Spielers. 3.1.5 State Synchronization Dokumentation | 01.07.2014 State Synchonization wird vom Network View selbst zur Verfügung gestellt und muss bei Wunsch aktiviert werden: 9 Um nur bestimmte Funktionen des Skriptes per State Synchronization zu aktualisieren, benutzt man die sogenannte Network.OnSerializeNetworkView(BitStream, NetworkMessageInfo) – Funktion: void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info{ int health = 0; if(stream.isWriting){ health = currentHealth; stream.Serialize(ref health); } else{ stream.Serialize(ref health); currentHealth = health; } } Dieses Beispiel beschreibt OnSerializeNetworkView – Funktion mit State Synchronization anhand einer Lebensaktualisierung. 3.1.6 Netzwerkbandbreite minimieren Die Netzwerkkommunikation ist im Vergleich zu anderen Aspekten des Spiels, sehr langsam. Deshalb ist es extrem wichtig zu überprüfen wie viele und wie oft Daten übermittelt werden. Wie auch schon erwähnt gibt es die Methoden RPC und State Synchronization. Mit dem Unreliable Modus wird das Objekt bei jeder Iteration von der Netzwerkupdateschleife übertragen. Die Frequenz für das Updaten eines Objektes steht standartgemäß bei 15 Updates pro Sekunde. Der Modus führt zu vielen Updates, aber verzögerte Pakete werden komplett ignoriert. Deshalb eignet sich dieser Modus für Objekte die ihren Status sehr oft verändern. Doch auch hier muss die Menge der gesendeten Daten beachtet werden. Mit dem Reliable Delta Compressed Modus werden Daten auf jeden Fall in der richtigen Reihenfolge verschickt. Wenn Pakete verloren gehen, dann werden sie erneut verschickt, bis alle Pakete in einer Sequenz vorhanden sind. Die Daten sind durch dieses Verfahren garantiert vorhanden, doch die Bandbreite wird stark beeinträchtigt. Der Vorteil dieses Dokumentation | 01.07.2014 In der Networkview gibt es die Möglichkeiten Reliable Delta Compressed und Unreliable. Diese Einstellungen unterscheiden sich stark voneinander. 10 Modus ist, dass er nur Unterschiede zwischen zwei Status schickt. Sollte sich also ein Objekt nicht bewegt haben, so werden auch keine Daten übermittelt. Wenn viele Spieler auf einem Server vorhanden sind und ein Spieler eine Animation ausführt, so sollten alle anderen Clienten, dies ebenfalls sehen. Man könnte nun die komplette Animation übermitteln, doch dies würde recht viel Bandbreite benötigen. Viel einfacher ist es einen Integerwert zu übermitteln, der bei den anderen Clienten eine Funktion ausführen lässt, der die Animation des Spielers zeigt. Durch dieses Verfahren wird ein großer Anteil an Bandbreite gespart. Spieler befinden sich recht häufig in anderen Bereichen des Spiels, sind jedoch auf demselben Server. Hier ist es aber unwichtig den Client des anderen Spielers perfekt synchronisiert zu haben, da die Spieler sich nicht sehen. Auch dadurch wird enorm viel Bandbreite gespart. Sollten die Spieler sich dann doch nähern, dann kann der Client sich wieder normal synchronisieren. Dieses Szenario kann sehr leicht umgesetzt werden, indem man Spieler die ziemlich weit entfernt sind nur über die RPC’s berechnen lässt und nahe Spieler über die State Synchronization. Sollten mehrere Spieler ein Level laden, so sollte man warten bis alle Spieler, das Level geladen haben, da keine nachträglichen Daten mehr geladen werden müssen. 3.2 Master Server Unity3D bietet zur Umsetzung einer Multiplayer-Umgebung einen sogenannten Master Server an, der die verschiedenen Server, auf denen Spiele laufen, verwaltet. So kann einem Client eine Übersicht der aktiven Server gegeben werden ohne eine ServerAdresse direkt kennen zu müssen. Neue Server melden sich am Master Server an und werden in die globale Liste übernommen. Zudem ermöglicht der Master Server eine einfachere Erstellung von Servern, da diese nicht die Freigabe von Ports etc. benötigen, sondern dieser Teil per NAT punchtrough umgangen wird. Dokumentation | 01.07.2014 3.2.1 Anmelden eines Servers 11 Um einen Server am Master Server anzumelden, muss im Server die Funktion: MasterServer.RegisterHost(string gameType, string gameName, string comment); aufgerufen werden. 3.2.2 Abmelden eines Servers Um einen Server am Master Server abzumelden, muss im Server die Funktion: MasterServer.UnregisterHost(); aufgerufen werden. 3.2.3 Abrufen der Serverliste Mit der Funktion: MasterServer.RequestHostList(string gameName); können alle verfügbaren Server, auf denen Spiele laufen, angefordert werden. Zurückgegeben werden HostData Objekte, über die sich mit dem Server verbunden werden kann. 3.3 Problem: Cheaten Es gibt eine große Anzahl an Cheats um Spiele zu beeinflussen. Wir betrachten das Cheaten in einer Multiplayer Umgebung. Das einfachste Cheaten ist das sogenannte Bug ausnutzen. Bugs sind sogenannte Fehler, die im System bestehen. Diese Fehler beeinflussen nicht unbedingt den Spielspaß, sondern können von Spielern eher ausgenutzt werden. Ein Beispiel ist, dass ein Spieler normalerweise nur ein Item erhält, doch durch eine bestimmte Handlung zwei erhält und dies mehrfach durchführt. Dafür benötigt der Nutzer kein direktes Tool um einen Vorteil zu erhalten. Dokumentation | 01.07.2014 „Als Cheat wird die Möglichkeit bezeichnet, in einem Computerspiel selbst oder durch externe Programme das Spiel in einer nicht dem gewöhnlichen Spielerverlauf entsprechenden Weise zu beeinflussen“(Wikipedia). 12 Das Manipulieren von Netzwerkpaketen ist eine recht beliebte Variante um sich einen Vorteil gegenüber anderen Spielern zu verschaffen. Dabei werden die zu übermittelten Daten so verändert, dass man zum Beispiel mehr Geld durch ein Ereignis erhält. Dies kann leicht verhindert werden, in dem man Funktionen grundsätzlich von dem Server berechnen lässt und die eingehenden Daten, die für die Funktion essenziel sind, überprüft werden. Grundsätzlich sollten Daten, die serverseitig benötigt werden auch serverseitig berechnet werden. Sehr gute Server sind dann eine Voraussetzung, doch die Manipulationsrate ist dann sehr gering, da der Client die Daten sendet und der Server diese Daten überprüft und anschließend berechnet. Funktionen die auf Clientseite berechnet werden, können zu leicht beeinflusst werden. Unity selber bietet die sogenannte Network.InitializeSecurity – Funktion an. Hierdurch wird eine Art Security Schicht gebildet und darf nicht auf Clientseite initialisiert werden. Die Funktion blockt unautorisiertes Lesen und blockiert Attacken. Des Weiteren verhindert die Funktion Datenmanipulation und unautorisierte Logins. Dokumentation | 01.07.2014 Es gibt auch eine Menge externe Tools die sowas überprüfen. Punkbuster ist mit eins der bekanntesten Anti-Cheatertools, doch auch diese sind oftmals nicht auf dem aktuellen Stand, denn Cheater programmieren um das Anti-Cheattool herum, wodurch eine Art Wettprogrammieren entsteht. Der Cheater findet eine Sicherheitslücke die er für kurze Zeit ausnutzen kann, bis der Anti-Cheat-Entwickler die Sicherheitslücke wieder schließt. 13 4. THIRD – PARTY ASSETS 4.1 Network – Assets Bei den hier genannten Assets handelt es sich um eigenständige Erweiterungen der UnityNetzwerk Funktionen. Die eine Multiplayer-Umgebung erleichtern und verbessern. 4.1.1 Photon Hauptvorteil von Photon ist die bestehende ServerCloud durch die keine eigenen Server benötigt werden um ein Globales Multiplayer-System zu realisieren. Server-Standorte sind beispielsweise USA, Europa, Singapore oder Japan. Zudem können weiterhin eigene PhotonServer bei Bedarf aufgesetzt und frei angepasst werden. Ein weiterer Vorteil ist die Unabhängigkeit einer bestimmten Plattform. Theoretisch gesehen können mit der PhotonCloud Konsolen- und PC-Spieler ohne weitere Anpassungen miteinander spielen. Außerdem bieten Photon verschiedene Verbesserungen der Netzwerkfunktionen die z.B. eine stabilere Verbindung ermöglichen oder Server entlasten (Load Balancing). Nachteil der PhotonCloud ist der Preis. Eine Free-Version ist zwar vorhanden, aber für einen späteren Gebrauch in einer Release-Version von C.I.T.Y. nur unzureichend nutzbar. Photon ist aufgrund des Preises nicht geeignet. 100 gleichzeitige User kosten 9€. Durch die Begrenzung der User steigen die Kosten nachträglich. 4.1.2 TNet: Tasharen Networking Automatische Hostsuche, sobald der derzeitige Host die Verbindung verliert oder sich abmeldet. Speicherung des ServerStates, neue Spieler erhalten vergangene RPC's oder bei Neustart des Servers können alle vorherigen RPC's geladen werden und der Server damit in den Stand vor dem Neustart gesetzt werden. Einfache Raum-Erstellung. Ein Server kann mehrere Räume mit eigenen Regeln und Szenen besitzen, die zudem unabhängig voneinander gespeichert werden können. Dokumentation | 01.07.2014 Das Tasharen Networking Asset bietet vor allem neue Funktionen im Netzwerkbereich an, z.B.: 14 Kein Unterschied zwischen Multi- und Singleplayer, eine explizite Unterscheidung in der Entwicklung muss nicht gemacht werden. LAN-Modus möglich, hierfür wird kein MasterServer etc. benötigt, d.h. Spiele können komplett ohne Internetverbindung im eigenen Netzwerk erstellt und an diesen teilgenommen werden. Dokumentation | 01.07.2014 Dadurch das eine große Anzahl an Funktionen vorgegeben sind und der Preis(62€) ein Fixpreis ist, würde sich TNet auf jeden Fall im späteren Verlauf der Entwicklung lohnen. 15 5. UMSETZUNG - KONZEPT 5.1 Einführung Im nachfolgenden Teil dieser Dokumentation soll erklärt werden, wie eine Umsetzung einer Multiplayer-Umgebung im C.I.T.Y. Projekt unsererseits gedacht ist. 5.2 Netzwerkmodell Geplant ist die Verwaltung der einzelnen Server über den bereits vorgestellten Master Server. Der eigentliche Spiele-Server ist ein Non-Authoritative Server, da die Umsetzung eines Authoritative Servers zum jetzigen Entwicklungsstandpunkt des C.I.T.Y. Projekts nicht möglich ist, bzw. zu viele Veränderungen am Projekt benötigt. Eine spätere Umsetzung zu einem Authoritative Server ist dennoch möglich und nicht ausgeschlossen. Auch soll es egal sein, worauf der Server läuft, ob auf einem eigenen Server als StandAlone Server oder auf dem Clienten selbst. Dokumentation | 01.07.2014 Hier ein kurzer Überblick: 16 5.3 Netzwerkkommunikation Master Server • Verwaltung der eigentlichen Hosts. • Hosts (egal ob Client-/Serverhosts) melden sich an diesem an und werden so in die globale Serverliste aufgenommen. • Clients erhalten auf Anfrage vom Server die aktuell verfügbaren Hosts auf denen Spiele laufen sowie zusätzliche Informationen vom Host selbst (Spieleranzahl, Spielmodus etc.). Host • Wird vom Spieler erstellt oder läuft auf einem eigenen Server. • Bei Erstellung: o Spielmodi Auswahl etc. Client • Spieler der sich mit einem Host verbindet. 5.3.1 Portöffnung Um miteinander zu kommunizieren, müssen Daten über Ports geschickt werden. Oftmals werden diese vom Router oder von einer Firewall geblockt und müssen zum Teil manuell freigeschaltet werden. Die meisten Programme schalten ihre Ports jedoch automatisch frei, wodurch keine Probleme entstehen. Unity bietet dieses Feature, mit Verbindung des MasterServers und des NUT punchthrough – Verfahren, an. 5.3.2 Host – MasterServer • Server starten – RPC Host → MasterServer Dokumentation | 01.07.2014 o 17 • Sobald ein Host erstellt wird meldet sich dieser am MasterServer an, der widerrum die benötigten Informationen wie IP-Adresse, Name des Servers, Einstellungen (bsp.: Spieleranzahl, SpielModi) in einer Datenbank speichert. Server schließen – RPC Host ↔ MasterServer o Wird ein Server geschlossen oder verliert die Verbindung zum MasterServer wird der entsprechende Eintrag aus der Datenbank entfernt. 5.3.3 Client – MasterServer • Serverliste abrufen – RPC Host → MasterServer o Bei Anfrage der Serverliste, wird dem Clienten die aktuelle Liste der verfügbaren Server mit den jeweiligen Einstellungen(Spielmodus, Spieleranzahl, Pingdurchschnitt) zurückgegeben, sowie die IP-Adresse der jeweiligen Server, damit der Client diesen beitreten kann. 5.3.4 Client - Host Server beitreten – RPC Client → Host o • Spielerinformationen abrufen – RPC Client → Host o • Chatnachrichten (egal ob Sprach- oder Textnachricht) werden zunächst an den aktuell verbundenen Host gesendet, der wiederrum überprüft an wen diese Nachricht gesendet werden soll(Bsp.: Alle, Privat, Gruppe etc.) und entsprechend weiterleitet. Spielerbewegung – State Synchronization Client → Host o • Der Client kann Informationen zu den aktuell verbundenen Clienten abrufen um z.B. ein Scoreboard(Spielernamen, Punkte, Ping) anzuzeigen. Chatnachricht senden – RPC Client → Host o • Möchte der Client einem Server beitreten, sendet er diesem zunächst eine Anfrage, ob noch genügend freie Plätze vorhanden sind oder sonstige Informationen nötig sind (Server-Passwort). Bei erfolgreicher Anfrage verbindet sich der Client mit dem Host. Ändert ein Spieler seine Position, wird das Spielerobjekt an den Host übergeben und an alle Spieler weitergeleitet. Interaktion – RPC Client → Host o Agiert der Client in irgendeiner Weise mit der Umwelt oder einem Spieler wird diese an den Host übergeben und an alle Spieler weitergeleitet. Dokumentation | 01.07.2014 • 18 5.4 Interfaces Befindet sich der Spieler in der Multiplayer-Umgebung werden diesem zusätzliche Informationen auf dem Display angezeigt: Wenn der Spieler sich einen Server erstellen möchte, so muss er den Servernamen, den Spielmodus und die Spieleranzahl angeben. Nachdem der Spieler den “Erstellen“ – Button drückt wird der Server erstellt. Dokumentation | 01.07.2014 Sollte der Spieler keinen Server erstellen, so kann der Spieler einem Server beitreten. Der Spieler bekommt eine Serverliste mit folgenden Informationen: Servername, Spielmodus, Spieleranzahl, Passwortschutz und Ping. Bei vielen Servern kann der Spieler die Server nach den Namen, sowie nach dem Spielmodus und passwortgeschützten Servern filtern. 19 Ereignisse werden oberhalb des Bildschirms angezeigt. Der Spieler erhält Informationen zu den relevanten Ereignissen die während des Spiels geschehen, sowie die noch bleibende Rundenzeit. Bsp.: „Spieler 2 wurde von Spieler 5 gefangen“ Der Spieler hat die Möglichkeit ein zusätzliches Fenster zu öffnen – das Scoreboard. In dem Scoreboard werden die aktuell verbundenen Spieler mit folgenden Informationen(Name, Ping,Score)angezeigt. Dokumentation | 01.07.2014 Der Chat innerhalb eines Servers wird dem Spieler in einem zusätzlichen Fenster auf dem Display angezeigt. In diesem Fenster kann er mit anderen Spielern kommunizieren. 20 5.5 Spielmodi 5.5.1 Allgemein Bei Teamspielen sind Teams farblich unterschieden. Jeder Spielmodus hat im Vorhinein festgelegte Einstellungen wie z.B. ein Zeitlimit pro Runde oder Gesamt und eine maximale Spielzahl. 5.5.2 Fangen Ein zufällig gewählter Spieler wird zum “Fänger“ und muss einen Mitspieler durch Berührungen fassen. Infolgedessen wechseln die beiden Spieler die Seiten, so wird der “Fänger“ zum “Gejagten“ und umgekehrt. Gewonnen hat der Spieler, der innerhalb des Zeitlimit am wenigsten gefangen wurde. Die Spieleranzahl sollte mindestens 2 betragen. Diese Spielrunden sollten auf jeden Fall zeitlich begrenzt werden(5 – 20 Minuten). 5.5.3 Last Man Standing Das Prinzip ist dasselbe wie das Fangen, nur dass jeder Spieler einen “Energiebalken“ hat, dieser beim “Fänger“ stetig sinkt. Der “Fänger“ muss einen Mitspieler fangen um die Senkung zu stoppen. Wenn die Energie auf Null gesunken ist, scheidet der Mitspieler aus und der Spieler mit der meisten Energie wird zum “Fänger“. Gewonnen hat der letzte auf dem Spielfeld bleibende Spieler. Auch in diesem Spielmodus sollten mindestens 2 Spieler vorhanden sein. Das Zeitlimit ist hier nicht begrenzt. Dokumentation | 01.07.2014 5.5.4 Räuber und Gendarm 21 Räuber und Gendarm ist eine Mischung aus Verstecken und Fangen, wo zwei Gruppen gebildet werden. Die “Räuber“ haben einen zeitlichen Vorsprung und müssen in dem Spielfeld verstecken. Danach müssen die “Gendarmen“ die Räuber suchen und fangen. Wenn ein Gendarm einen Räuber fängt, muss er ihn in Gefängnis bringen. Das Gefängnis befindet sich auf der Mitte des Spielfeldes. Der Räuber kann durch abschlagen eines anderen Räuber wieder befreit werden. Ziel ist es, innerhalb des Zeitlimit(20 Minuten) alle Räuber zu fangen. Die Spieleranzahl sollte auch hier mindestens 2 betragen. 5.6 Chat 5.6.1 Textbasiert Dem Spieler steht ein Text-Chat zur Kommunikation mit anderen Spielern eines Servers zur Verfügung. Dieser ist unterteilt auf verschiedene Kommunikationsebenen: • Global o • Team o • Befindet sich ein Spieler in einem Team kann dieser Nachrichten an die Gruppenmitglieder versenden. Umgebung o • Der Spieler kann Nachrichten an alle Spieler eines Servers senden. Der Spieler kann Nachrichten an andere Spieler senden, die sich in einem bestimmten Radius befinden. Spieler o Der Spieler kann private Nachrichten direkt an einen anderen Spieler versenden. 5.6.2 Sprachbasiert Dokumentation | 01.07.2014 Äquivalent zum textbasierten Chat hat der Spieler auch die Möglichkeit per Sprache mit den anderen Spielern zu kommunizieren. Doch durch die hohe Bandbreitenanforderung, die mit dem Sprachchat vorhergehen ist es recht schwierig umzusetzen. Wenn der Sprachchat implementiert werden würde, dann müsste an der Qualität der übertragenden Stimme einiges eingestellt werden, da die Bandbreite sonst zu hoch ist. 22 6. UMSETZUNG – IMPLEMENTIERUNG Das Konzept der Multiplayer-Umgebung wurde in einem eigenständigem Projekt, unabhängig von C.I.T.Y., umgesetzt, welches dennoch mit wenigen Anpassungen ins C.I.T.Y. Projekt integriert werden kann. 6.1 Entwicklungsbericht Die Entwicklung der konzeptbasierten Multiplayer-Umgebung verlief recht gut, konnte allerdings aufgrund Zeitmangels nicht komplett fertigstellt werden. Die größten Probleme ergaben sich bei der Oberflächen-Erstellung. Unity3D bietet mit dem hauseigenen Oberflächen-System nur spärliche Möglichkeiten. Beispielsweise können Tabellen nicht oder nur mit hohen Entwicklungsaufwand erstellt werden. Zudem ist das Oberflächen-System sehr umständlich konzipiert. Die Umsetzung auf Netzwerkebene fiel hingegen leicht, da Unity3D fast alle benötigten Netzwerkfunktionen bereitstellt und neue leicht durch RPC’s ermöglicht. Trotz der Probleme konnte das meiste des Konzepts erfolgreich umgesetzt werden. In der Konzept-Version lässt sich ein Server erstellen oder über eine Lobby einem der verfügbaren Server beitreten. Zudem können Spieler sich in der Spielwelt frei bewegen und sind untereinander synchron. Der implementierte Chat ermöglicht außerdem die Kommunikation mit anderen Spielern. Hier mussten allerdings auch die ersten Abstriche, aufgrund von Zeitmangel, gemacht werden. Der derzeitige Chat erlaubt nur eine globale Kommunikation. Gruppen- oder Privatchat fehlt hier komplett. Des Weiteren konnten keine Spielmodis implementiert werden. Die angesprochenen Sachen können dennoch leicht nachgeholt bzw. nachgereicht werden. Dokumentation | 01.07.2014 In der jetzigen Version lässt sich die Multiplayer-Umgebung trotzdem verwenden, da alle Komponenten unabhängig voneinander programmiert wurden und damit auch ohne die fehlenden Teile funktionieren. 23 Nächste Schritte wären zunächst die fehlenden Teile zu implementieren und danach eine Integration in das C.I.T.Y. Projekt. Hierbei könnten bzw. müssten die Funktionen zu Synchronisierung der Spielerobjekte erweitert werden um auch bei hohen Spieleranzahlen keine zu hohe Bandbreitennutzung zu fordern. 6.1.1 Komponentenübersicht Zur Umsetzung wurden verschiedene Komponenten entwickelt, die wichtigsten sind: 1) MultiplayerManager An der MultiplayerManager-Komponente hängt das Hauptskript “MultiplayerScript”, dieses stellt die nachfolgenden Oberflächen bereit, die es ermöglichen einen Server zu erstellen oder als Client einem Server beizutreten. Auch meldet es den erstellten Server an dem Unity3DMasterserver an. 2) SpawnManager Die SpawnManager-Komponente instanziiert sobald sich ein Spieler mit einem Server verbindet alle benötigten Player-Komponenten an festgelegten Spawnpunkten. 3) Player An der Player-Komponente hängt das “PlayerScript”, welches alle Spieler auf einem Server synchron hält. Zudem ermöglicht dieses, die Bewegung der eigenen Spielerfigur. 6.2 Fazit Die Konzeptuierung und Entwicklung einer Multiplayer-Umgebung hat in der Gruppe viel Spaß gemacht. Das größte Manko war allerdings die fehlende Zeit, wodurch in der späteren Umsetzung Abstriche gemacht werden mussten. Dokumentation | 01.07.2014 Trotzdem haben wir viel im Umgang mit Unity3D und Netzwerken gelernt und konnten eine erste Konzeptversion umsetzen, die zwar noch erweitert werden muss, aber eine solide Grundlage für eine Multiplayer-Umgebung bietet. 24 7. LITERATURVERWEIS TNET: http://www.tasharen.com/?page_id=4518 Photon: https://www.exitgames.com/en/Realtime Unity3d: ScriptReference: http://docs.unity3d.com/ScriptReference Manual: http://docs.unity3d.com/Manual Externe Quellen: Valve: https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking Dokumentation | 01.07.2014 Paladinstudios: http://www.paladinstudios.com/2013/07/10/how-to-create-an-onlinemultiplayer-game-with-unity/ 25 Begriff Definition Client Rechner, auf dem das Programm läuft Host Rechner, der einen Server zur Verfügung stellt Spawnpunkte Punkte im Spiel, an denen Spieler starten Cheaten Externes Programme oder Bugs, das den regulären Spielerverlauf beeinflusst und von Spieler ausgenutzt werden Firewall Ein Sicherungssystem, das ein Rechnernetzt oder einen einzelnen Computer vor unerwünschten Netzwerkzugriffen schützt IP-Adresse Eine einzigartige Adresse, die jedem Gerät zugewiesen wird Dokumentation | 01.07.2014 8. GLOSSAR 26