Question by
USERNAME_NOT_FOUND · Oct 16, 2016 at 04:29 AM ·
networkingmultiplayergameshootingmultiplayer-networking
RPC sending Failed
I'm making a multiplayer FPS game and I need to sync movements and player information such as health, weapons and so on. I downloaded "Simple Multiplayer Kit" from Asset Store and I ran into some serious problems.
Script that I'm using is
public class PlayerSync : MonoBehaviour {
Vector3 lastPosition;
Quaternion lastRotation;
Transform myTransform;
NetworkView networkView;
Vector3 targetPosition;
Quaternion targetRotation;
[SerializeField] float posThreshold = 0.1f;
[SerializeField] float rotThreshold = 5f;
void Start ()
{
networkView = GetComponent<NetworkView>();
if(networkView.isMine == true)
{
myTransform = transform;
//Make sure everyone sees the player at right location the moment he spawns
if(!Network.isServer)
{
networkView.RPC("UpdateMovement", RPCMode.OthersBuffered, myTransform.position, myTransform.rotation);
}
}
}
[RPC]
void SetUsername (string name)
{
gameObject.name = name;
}
void Update ()
{
if (networkView.isMine)
{
SendMovement();
}
else
{
ApplyMovement();
}
}
void SendMovement()
{
if (Vector3.Distance(myTransform.position, lastPosition) >= posThreshold)
{
//If player has moved, send move update to other players
//Capture the player's position before the RPC is fired off and use this
//to determine if the player has moved in the if statement above.
lastPosition = transform.position;
networkView.RPC("UpdateMovement", RPCMode.OthersBuffered, myTransform.position, myTransform.rotation);
}
if (Quaternion.Angle(myTransform.rotation, lastRotation) >= rotThreshold)
{
//Capture the player's rotation before the RPC is fired off and use this
//to determine if the player has turned in the if statement above.
lastRotation = transform.rotation;
networkView.RPC("UpdateMovement", RPCMode.OthersBuffered, myTransform.position, myTransform.rotation);
}
}
void ApplyMovement ()
{
transform.position = Vector3.Lerp(transform.position, targetPosition, 0.5f);
transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, 0.5f);
}
[RPC]
void UpdateMovement (Vector3 newPosition, Quaternion newRotation,int health)
{
targetPosition = newPosition;
targetRotation = newRotation;
}
}
The error that I got is this :
Sending RPC 'UpdateMovement' failed because the number of supplied parameters doesn't match the RPC declaration. Expected 3 but got zd parameters.
UnityEngine.NetworkView:RPC(String,RPCMode,Object[])
I have no Idea what 'zd parameters' are and where to fix. Please help me with this problem.
Comment
Your answer
Follow this Question
Related Questions
How to smoothly interpolate game object positions in a network game? 0 Answers
How configure a dedicated server about Unet 0 Answers
Assign Network Manager an Online Scene with Script 0 Answers
localScale in network 0 Answers
Card Game using Network Manager 0 Answers