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

本文关键字:网络 同步 玩家 位置 结果 | 更新日期: 2023-09-27 18:33:41

我在尝试同步网络上的玩家位置时得到奇怪的结果。 我有一个网络游戏,我在其中生成两个玩家到世界中。 每个玩家都有一个网络视图,上面没有观察到的对象。 每次固定更新,我都会进行 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 的速度,以便我可以以正确的速度控制角色,以确保他通过网络正确移动。 但是,由于我使用的速度由速度系数乘以 Input.GetAxis 来确定,因此每当我向左移动时,我都会向我的 RPC 发送负速度值。 因此,它试图以小于零的速度从一个位置移动到另一个位置,因此它不会移动。 通过使用我的速度系数的绝对值解决了这个问题。