- Home /
Multiplayer syncronisation
I created a simple prototype that has twp objects and board. Host can move one object and client can move the other. But, when server moves the object it appears on right position on client. On the other hand when client moves it's object it does not appear in the host's game. Can someone tell me how to overcome this problem?
Here is my code for host:
if (networkView.isMine)
InputMovement();
and client:
if (!networkView.isMine)
InputMovement();
You need to use NetworkViews or Remote Procedure Calls(RPC) so that its sent over the network.
Answer by RedSandStudios · Feb 20, 2014 at 12:36 PM
Welcome to the frustrations of network programming. The confusing thing is that even though you've called it a server, it is still actually a client as well, as far as the game is concerned. The code on your object should be the same for both i.e:
if (networkView.isMine)
InputMovement();
Unity handles whether or not you own the object. I am assuming that you are using Network.Instantiate(..)
to create your different objects? If not, then have a look at this tutorial.
Each NetworkView has a unique ID which is used to tell which object has sent a particular update or which object an incoming RPC call should be directed to. It also has a unique owner, which is assigned during Network.Instansiate(..)
. Therefore the Update calls should go like this:
Where Player 1 is your 'Server' and Player 2 is your 'Client'. Because you used if (!networkView.isMine)
in just the client, it causes the odd behaviour you described.
Your answer
Follow this Question
Related Questions
Unity networking tutorial? 6 Answers
Stop host without kick clients 1 Answer
Networking RPC calls never sent to other clients 1 Answer
Multiplayer push object error. 0 Answers
Character Animation Lags in Multiplayer 2 Answers