Question by
murkertrer · Feb 10, 2016 at 03:25 AM ·
networkingrpcsynchronization
Sync movement Unet 5.2 Authoritative Server? Rpc's working when keypressed
Hey guys! Please help I'm really stuck on this one.
I need to go beyond the Network.Transform that the new Networking system has, so I was trying to write my own code to have authoritative movement - a ball that instructs the server to move it, and then gets the synchronization of the position back.
So far, the synchronization takes place effectiveley only if I press the WASD keys, but If I try to move the
RpcUpdateUnitPosition (this.transform.position);
Some where else the syncronization does not take place... Any Ideas? I tried using [Client] but no result..Thank you I apreciate it.
The code (The object needs a Rigidbody and a Network Identity with local player authority)
using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
public class PhoenixMoveRigid : NetworkBehaviour {
Vector3 pos;
Rigidbody rb;
public Transform director;
public float thrust = 20f;
public float jumpStrenght = 1;
private float heightMovement = .7f;
void Start () {
rb = this.GetComponent<Rigidbody>();
director = Camera.main.transform;
}
void FixedUpdate()
{
if (isLocalPlayer)
{
KeyCode[] wasdInput = { KeyCode.W, KeyCode.S, KeyCode.A, KeyCode.D, KeyCode.Space };
foreach (KeyCode wasdPressed in wasdInput)
{
if (!Input.GetKey (wasdPressed))
continue;
CmdMoveit (wasdPressed);
};
}
}
[Command]
void CmdMoveit(KeyCode wasdRecieved)
{
if(this.isServer)
{
switch (wasdRecieved) {
case KeyCode.W:
rb.AddForce (director.forward * thrust);
break;
case KeyCode.A:
rb.AddForce (director.right * thrust * -1);
break;
case KeyCode.S:
rb.AddForce (director.forward * thrust * -1);
break;
case KeyCode.D:
rb.AddForce (director.right * thrust);
break;
case KeyCode.Space:
rb.AddForce (director.up * thrust * jumpStrenght);
break;
}
RpcUpdateUnitPosition (this.transform.position);
}
}
[ClientRpc(channel = 0)]
void RpcUpdateUnitPosition(Vector3 posNew)
{
if (this.isClient)
{
this.transform.position = posNew;
}
}
}
Comment