Mirror - thm-mni-ii/SWT-P_SS20_Dixit GitHub Wiki

Wir verwenden Mirror für die Kommunikation im Netzwerk.
Mirror abstrahiert durch Interfaces und GameObjects die technische Umsetzung des Netzwerks. So ist es recht einfach ein Funktionierendes Netzwerk zu schreiben ohne sich mit der zugrunde liegenden Architektur zu beschäftigen.

Das Netzwerk kann man in zwei ebenen Betrachten:
Der Server, der das Spiel steuert und die Spieler oder Clients. Dabei ist ein Client der "Host" Client und ist in der selben Instanz wie der Server. GameObjects existieren sowohl im Server als auch in den Clients. Auf diese weise wird die Kommunikation zwischen Server und Clients realisiert. Zur Kommunikation werden hauptsächlich so genannte Remote Actions verwendet:

  • ClientRpc Calls führen eine Methode in allen Clients aus, in denen das entsprechende GameObject existiert.
  • TargetRpc Calls führen eine Methode in einem bestimmten Client aus.
  • Commands führen eine Methode im entsprechenden GameObject des Servers aus.

Um Informationen zu senden, können entsprechende Argumente angegeben werden. Außerdem ist es möglich Methoden als Server-Only oder Client-Only zu deklarieren. GameObjects können ebenfalls als Server-Only deklariert werden. Das ist hilfreich, um Daten oder Funktionen zu kapseln oder von den Clients auszulagern.

Im folgenden Diagramm ist der Aufbau des Netzwerkes mit Server und Clients graphisch dargestellt:

Abgerundete Kästen sind Spielinstanzen, die sich über Mirror verbunden haben.
Die Rechtecke sind GameObjects. Ein Fett gedruckter Name zeigt an, dass das Objekt in Dieser Spielinstanz erstellt wurde.

Wie diese Prinzipien in unserem Spiel angewendet wurden kann man hier sehen.