C# 通过网络同步玩家位置的奇怪结果

C# 通过网络同步玩家位置的奇怪结果,c#,unity3d,multiplayer,C#,Unity3d,Multiplayer,当我尝试在网络上同步玩家的位置时,我得到了奇怪的结果。我有一个网络游戏,在这个游戏中我会产生两个玩家。每个播放器都有一个网络视图,上面没有观察到的对象。每次固定更新,我都会进行一次RPC调用,以更新播放机在服务器上的位置。然而,当我把一个球员移到右边时,这个位置才开始更新。在我开始向右移动玩家之前,不会显示任何其他移动,在这种情况下,位置将立即更新。以下是迄今为止的相关代码: void FixedUpdate () { if (networkView.isMine) {

当我尝试在网络上同步玩家的位置时,我得到了奇怪的结果。我有一个网络游戏,在这个游戏中我会产生两个玩家。每个播放器都有一个网络视图,上面没有观察到的对象。每次固定更新,我都会进行一次RPC调用,以更新播放机在服务器上的位置。然而,当我把一个球员移到右边时,这个位置才开始更新。在我开始向右移动玩家之前,不会显示任何其他移动,在这种情况下,位置将立即更新。以下是迄今为止的相关代码:

void FixedUpdate ()
{
    if (networkView.isMine)
    {
        grounded = Physics2D.OverlapCircle(groundCheck.position, groundRadius, whatIsGround);
        anim.SetBool("ground", grounded);

        anim.SetFloat("vSpeed", rigidbody2D.velocity.y);

        float move = Input.GetAxis("Horizontal");

        anim.SetFloat("speed", Mathf.Abs(move));

        rigidbody2D.velocity = new Vector2(move * MaxSpeed, rigidbody2D.velocity.y);


        float speed = move * MaxSpeed;
        networkView.RPC("UpdateNetworkPosition", RPCMode.Others, LastPosition, speed);

    } 
}

[RPC]
void UpdateNetworkPosition(Vector3 newPosition, float speed)
{
    Debug.Log("Updating network position");
    transform.position = Vector3.Lerp(transform.position, newPosition, Time.deltaTime * speed);
}

谢谢你的建议

所以答案很简单。我正在传递角色移动到RPC的速度,以便我可以以正确的速度对角色进行lerp,以确保他在网络上正确移动。但是,由于我使用的速度是由速度因子乘以Input.GetAxis确定的,所以每当我向左移动时,我都会向RPC发送一个负的速度值。因此,它试图以低于零的速度从一个位置移动到另一个位置,因此它不会移动。这个问题是通过使用我的速度系数的绝对值来解决的