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