Nachdem sich nun zwei Clients mit dem Server verbinden konnten war mein nächstes Ziel mit dem Stand meines Photon-Projektes gleichzuziehen. Je Client wird ein Character instanziiert und die eigenen Bewegungen sollen für den anderen Client sichtbar werden.
Da ich das mit Photon schon geschafft hatte, konnte ich mir in etwa vorstellen wie es funktioniert und musste nur noch die uLink-Schreibweise herausfinden.
Nach kurzer Recherche bin ich auf diese Übersicht gestoßen die wunderbar erklärt wie ich meine Bewegungsinformationen per Skript sende bzw. andere Bewegungen empfange:
private Vector3 correctPlayerPos; void uLink_OnSerializeNetworkView(uLink.BitStream stream, uLink.NetworkMessageInfo info) { if (stream.isWriting) { // We own this player: send the others our data stream.Write(transform.position); } else { // Network player, receive data this.correctPlayerPos = stream.Read(); } }
Alleine diese Funktion im Skript wird nichts bewirken. Diese funktioniert nämlich wie der Name schon sagt nur mit einem NetworkView auf dem jeweiligen Objekt.
Unity3D hat eine eigene NetworkView-Komponente, die aber nicht genutzt werden kann, da im Skript eine uLink-Funktion aufgerufen wird. Also bekommt das Playerobjekt die uLink-NetworkView-Komponente.
Darauf findet man wieder eine Komponente mit dem Namen "observed". Hier muss das Skript drauf, dessen Daten im Netzwerk gesendet werden sollen. In meinem Beispiel heißt das Skript movealternativ.cs und beinhaltet außer der oben gezeigten Funktion die Keyboardsteuerung (was in diesem Post aber noch keine Rolle spielt) des Players.


Wenn mit dieser Voraussetzung das Spiel gestartet wird, kann man im Inspektor die Position eines Characters verändern, was dem anderen Client mitgeteilt und angezeigt wird.