Jump to content
Unity Insider Forum

Unity Network


Gast emrar

Recommended Posts

Unity Network

 

Von Emrar

 

Inhaltsangabe

x Einleitung

o Allgemeines über Network (ca. zu 60% fertig)

o Network Elemente in Unity

o Network View

o Details zu „RPC“

o State-Synchronisierung

o Network Instanziieren

o Master-Server

o Bandbreite minimieren

 

Quelle: Unity Network Reference Guide

 

Bitte fragen etc. nicht hier Posten, sondern hier!!!

Lob, Kritik und Verbesserungsvorschläge hier!

 

 

 

mfg Emrar

Link zu diesem Kommentar
Auf anderen Seiten teilen

Einleitung

Network ist ein sehr großes und detailliertes Thema. In Unity ist es jedoch extrem einfach Netzwerk-Funktionen zu erstellen. Allerdings ist es immer noch am besten, die Breiten und Tiefen beim erstellen von Netzwerk-Spielen zu verstehen. Auf den folgenden Seiten werden die Grundlagen von Netzwerk-Konzepten und die Unity-spezifische Ausführungen dieser Konzepte erklärt.

 

Allgemeines über Network

Die folgenden Informationen sind eine Sammlung von Begriffen, die für jede Art von Spiel Netzwerk-Aktivitäten gebraucht werden und sind nicht spezifisch für Unity.

 

Was ist Networking?

Das grundlegende Konzept der Vernetzung ist die Kommunikation zwischen mehreren Computern. Dazu benötigen Sie einen Client und einen Server. Der Server kann ein „dedicated Server“ sein oder auch nicht. Wenn ein Server eingerichtet wurde und sich ein Client verbunden hat, können Daten für ein Netzwerk-Spiel versendet werden.

Das erstellen eines Netzwerk-Spieles erfordert viel Aufmerksamkeit auf einiges sehr spezifische Details. Selbst in Unit, wo die meisten Aktionen leicht zu entwerfen und zu erstellen sind, bleibt Networking äußerst komplex. Unity hat sich entschieden Networking sehr robust und flexibel zu gestalten. Dies bedeutet, dass Sie als Schöpfer des Spieles viele Entscheidungen, die Sie normalerweise nicht haben, treffen müssen. Diese Entscheidungen haben einen großen Einfluss auf den Aufbau Ihres Spieles, deshalb ist es am besten diese Entscheidungen zu früh wie möglich zu treffen. Das bedeutet, das Lernen und Planen dieser Konzepte ist sehr wichtig und hat langfristige Auswirkungen.

 

Networking Ansätze

Es gibt zwei gängige und bewährte Ansätze zur Strukturierung eines Netzwerk-Spieles. Diese Ansätze werden Authoritative Server und Non-Authoritative Server genannt. Beide Ansätze beruhen auf einen Server, welche Clients verbindet und Informationen zwischen Ihnen versendet. Sie bieten auch mehr Privatsphäre für den Endbenutzer, da eigentlich nie die Clients direkt miteinander verbunden sind und so Ihre IP-Adresse unerreichbar für andere Clients sind.

 

Authoritativer Server

Der autoritativen Server Methode muss alle Welt Simulationen durchführen, die Spielregeln anwenden und die Client-Player-Eingaben verarbeiten. Jeder Client sendet seine Eingaben (in Form von gedrückten Tasten oder um angeforderte Funktionen zu bearbeiten) an den Server und erhält fortlaufend den aktuellen Stand des Spieles vom Server. Der Client führt nie eine Spiel-Logik aus. Stattdessen sagt der Client den Server was er machen will und der Server verarbeitet die interne Logik selbst und sendet dem Client das gewünschte Produkt.

 

Im Grunde ist dies eine Trennung zwischen dem was der Client machen will und was geschieht. Dies erlaubt dem Server zu wissen was jeder Client machen will, übernimmt die Spiel-Logik (die von Spiel zu Spiel variieren können) und erzählt dem Client genau was zu machen ist. Dies kann man sich so Vorstellen: „Client sagt dem Server was er machen will -> der Server bestimmt was passiert -> der Server sagt dem Client wie er aktualisieren soll“.

 

Ein Vorteil dieser Methode ist, dass es dem Client schwierig gemacht wird zu betrügen(cheaten). Zum Beispiel können die Clients so nicht sagen „töte diesen Charakter“ wegen den technischen Beschränkungen der Netzwerk-Kommunikation. Sie können dem Server nur sagen „Ich feuerte meine Waffe“ und der Server überprüft ob es einen kill gab.

 

Ein weiteres Beispiel für einen autorisierten Server ist das folgende Physik-Spiel: „Client sendet dem Server eine Eingabe-> Server führt die Physik-Simulation durch und ermittel alle Kollisionen und deren Effekte -> Server sendet die Aktualisierung von den Objekt-Positionen zum Client“. Dies bedeutet, dass jeder Client die umfassende Physik-Simulation nicht selbst ausführt, sonder die Physik-Simulationen vom Server ausgeführt wird und anschließend wird diese dem Client übermittelt.

 

Mit autoritativen Servern findet eine lokale Bewegung erst statt, wenn der Server reagiert hat, dies kann zu unrealistisch aussehenden Bewegungen führten. Also, wenn Sie vorwärts drücken wird für 100ms nichts passieren, wenn die Zeit für die jeweilige Strecke zum Server und wieder zurück 50ms dauert. Um dies zu verhindern wird eine Technik namens „Client Side Prediction“ genutzt. Dies wird nicht genauer erläutert, da dies eine sehr technische und spezialisierte Technik ist. Einfacher ist es den Client die lokale Bewegung übernimmt und der Server verbessert es nur, wenn etwas nicht richtig ist. Der Server kann die Aktionen des Clients überschreiben, wenn etwas falsch prognostiziert wurde. Für weiter Informationen über Client Side Prediction, googlen Sie den Begriff.

 

Einen Server zum autoritativen Servern zu machen, verursacht eine stärkere Belastung der Prozesse auf dem Server. Stellen Sie sich einen Server für ein Action-Speil vor, welcher eine Vielzahl von verschiedenen Prozessen und Befehlen von 32verschiedenen Spielern bearbeiten muss. Der Server muss jede Benutzter Eingabe, bearbeiten und überprüfen was legal ist und was nicht, manchmal müssen auch Konflikte zwischen zwei Clients gelöst werden.

 

Non-autoritativen Server

Ein nicht autorisierender Server kontrolliert nicht die Ergebnisse der einzelnen Benutzter eingaben. Der Client verarbeitet die Benutzereingaben und die Spiellogik selbst und sendet die Ergebnisse zum Server. Der Server synchronisiert alle Aktionen. Dies ist einfacher aus der Entwickler-Perspektive zu implementieren , wie der Server nur Nachrichten zwischen den Clients versendet und dies nicht zusätzlich Überarbeitet.

Es besteht keine Notwendigkeit für jede Art von Prognose-Methoden, da die komplette Physik und Ereignisse beim Client verarbeitet wird und senden dem Server das Ergebnis. Die Clients sind die Eigentürmer Ihrer Objekte und die einziges welche lokale Änderungen dieser Objekte zum Server senden können.

 

Methoden der Netzwerk-Kommunikation

Nun da wir die grundlegenden Architekturen von Netzwerkspielen kennen, werden wir in die untere Ebene, wie Clients und Server miteinander kommunizieren, gehen.

Es gibt zwei relevante Methoden: „Remote Procedure Calls „und „State Synchronization“ .

 

Remote Procedure Calls

Auch genannt RPCs, Remote Procedure Calls werden verwendet, um Funktionen auf verschiedenen Rechner des Netzwerkes zu nutzen. Dies kann auch lokale Instanzen eines Spieles beinhalten. Clients können RPCs zum Server schicken und der Server kann RPCs zu einem oder mehreren Clients schicken. RPCs werden am häufigsten bei selten genutzten Aktionen verwendet. Zum Beispiel wenn ein Client eine Tür öffnet, so sendet der Client per RPC, dass die Tür geöffnet wurde und der Server sendet per RPCs an alle Clients das die Tür offen ist.RPCs werden zum Verwalten und Ausführen von Funktionen (Events) verwendet.

 

Beispiele zu RPCs:

Diese vier Beispiele sollen die Nutzung von RPCs an Hand eines FPS verdeutlichen.

 

Legende

post-75-002291900 1276980777_thumb.png

 

Beispiel 1

 

post-75-092993900 1276980853_thumb.png

 

Client „Team Blau 8“ sagt dem Server er will die Nachricht „Hi“ an alle senden, der Server verarbeitet diesen Antrag, überprüft an wenn alles die Nachricht gesendet werden soll, in diesem Fall an alle und sendet die Nachricht zu allen Clients aus Team Blau von 1 – 7 und aus Team Rot von 1 – 8, die Nachricht erreicht die anderen Clients und es wird „Team Blau 8 sagt: Hi“ausgegeben.

 

Beispiel 2

 

post-75-021698200 1276981020_thumb.png

 

Client „Team Rot 1“ sagt dem Server, er will die Team Nachricht „Zu Punkt A“ an sein Team senden, der Server verarbeitet diesen Antrag, überprüft an wenn alles diese Nachricht gesendet werden soll, in diesem Fall Team Rot und sendet die Nachricht zu Team Rot 2-8, die Nachricht erreich die Clients und es wird „Team Message von Team Rot 1: Zu Punkt A“ ausgegeben.

 

Beispiel 3

 

post-75-065172100 1277223108_thumb.png

Client „Team Rot 1“ sagt dem Server, er will die Team Nachricht „Greift Punkt A an“ an sein Team senden, der Server verarbeitet diesen Antrag, überprüft an wenn alles diese Nachricht gesendet werden soll, in diesem Fall Team Rot und sendet die Nachricht zu Team Rot 2-8, die Nachricht erreich die Clients und es wird „Team Message von Team Rot 1: Greift Punkt A an“ ausgegeben.

 

Zur gleichen Zeit:

Client „Team Blau 1“ sagt dem Server, er will die Team Nachricht „Verteidigt Punkt A“ an sein Team senden, der Server verarbeitet diesen Antrag, überprüft an wenn alles diese Nachricht gesendet werden soll, in diesem Fall Team Rot und sendet die Nachricht zu Team Rot 2-8, die Nachricht erreich die Clients und es wird „Team Message von Team Blau 1: Verteidigt Punkt A“ ausgegeben.

 

Beispiel 4

 

post-75-012943900 1277223305_thumb.png

 

Diesmal werden wir nicht so genau auf die Details eingehen.

Client „Team Rot 1“ sendet Team Rot 2- 8 „Greift Punkt B an“.

Client „Team Blau 1“ sendet Team Blau 2-8 „Greift Punkt C an“.

Client „Team Blau 8“ sendet allen außer sich selbst „Tschau ich muss gehen“.

 

State- Synchronisierung

State-Synchronisierung wird zum Austausch sich ständig veränderten Daten benutzt. Das beste Beispiel hierfür wäre die Position eines Spielers in einem Action-Spiels. Der Spieler ist immer im Bewegung, läuft rum, springt, etc. Alle anderen Spieler, auch diejenigen, welche nicht Kontrolliert werden, müssen wissen wo sich der Spiele befindet und was er macht. Durch die ständige Weitergabe von Daten über die anderen Spieler seine Position, kann das Spiel genau die Position der anderen Spieler darstellen.

Diese Art von Daten wird regelmäßig und häufig über das Netzwerk versendet. Dies erfordert jedoch viel Bandbreite, deshalb ist es wichtig die Datenmenge möglichst klein zu halten.

bearbeitet von Lars Klein
Habe es mal auf einen Post reduziert, man muss es ja nicht mit spammen übertreiben.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...