Jump to content
Unity Insider Forum
straesso

Einfache Möglichkeit des Informationsaustausches?

Recommended Posts

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

Share this post


Link to post
Share on other sites

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.

  • Thanks 1

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×