straesso Geschrieben 1. Dezember 2018 Melden Share Geschrieben 1. Dezember 2018 Hallo, ich bin absoluter Neuling zum Thema Unity Networking und beisse mir gerade an einem (vermeintlich) einfachen Problem die Zähne aus: Ziel ist die Erstellung eines Tetris-Clones für zwei Spieler. Das Spiel soll ähnlich funktionieren, wie beim original Gameboy von 1990 ;-) Jedes Mal, wenn ein Spieler mehr als eine Reihe (r) auf seinem Board vervollständigt, bekommt der gegnerische Spieler von unten r-1 Reihen in sein Bord geschoben. Diese Reihen können nie wieder entfernt werden, womit das verfügbare Spielfeld immer kleiner wird... Was ich tun möchte, ist eigentlich simpel: wenn auf einem Client mehr als eine Reihe vervollständigt wurde, bekommt der gegnerische Client eine Information, wie viele Reihen auf seinem Board von unten hinzuzufügen sind. Allerdings soll das Ganze dann nur auf dem Bord des gegnerischen Clients passieren. Eine Synchronisation zwischen den Boards ist nicht notwendig und auch nicht sinnvoll. Einen "Spieler", ein PlayerPrefab gibt es ebenfalls nicht und auch keine Synchronisation zwischen Objekten. Meine ganzen Versuche mit dem NetzwerkManager, NetzwerManager HUD, [Command], [SyncVars], etc. sind immer daran gescheitert, dass jede Aktion grundsätzlich auf beiden Bords stattfindet. Erzeuge ich eine Instanz eines Gameobjects auf dem einen Bord, wird sie auch auf dem anderen Bord erzeugt und die Änderungen sind bei beiden Clients sichtbar. In meiner Vorstellung muss es doch eine einfache Möglichkeit geben, lediglich eine simple Information über das Netzwerk auszutauschen und die Clients agieren ansonsten unabhängig voneinander. Bin für jeden Tipp, jede Idee oder Anregung dankbar. Viele Grüße, Olaf Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 1. Dezember 2018 Melden Share Geschrieben 1. Dezember 2018 Du arbeitest offenbar mit UNET. Da funktioniert das so, dass jedes Objekt, das eine "NetworkIdentity"-Komponente hat, eine Identität im Netzwerk hat - wie der Name schon sagt. Wenn du einen [Command] oder einen [ClientRPC] ausführst oder eine [SyncVar]-Variable änderst, dann bezieht sich der Befehl bzw. die Werteänderung auf das Objekt mit dieser Identität. Und zwar netzwerkweit. Du kannst also z.B. deinen Boards jeweils eine NetworkIdentity geben und dann einen [Command] auf diesem Board ausführen - dann wird es bei allen Clients bei diesem Board ausgeführt und bei keinem anderen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
straesso Geschrieben 2. Dezember 2018 Autor Melden Share Geschrieben 2. Dezember 2018 vor 12 Stunden schrieb Sascha: Du kannst also z.B. deinen Boards jeweils eine NetworkIdentity geben und dann einen [Command] auf diesem Board ausführen - dann wird es bei allen Clients bei diesem Board ausgeführt und bei keinem anderen. Danke für den Tipp. Werde mal schauen, was ich daraus machen kann. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.