尝试在网络上同步玩家位置时,我得到了奇怪的结果。我有一个网络游戏,我在世界上产生了两个玩家。每个玩家都有一个网络视图,上面没有观察到的对象。每次修复更新时,我都会进行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);
}
感谢您的任何建议!
答案 0 :(得分:0)
事实证明,答案很简单。我正在通过角色移动到RPC的速度,这样我就可以以正确的速度渲染角色,以确保他能够在网络上正确移动。但是,因为我使用了一个速度因子乘以Input.GetAxis确定的速度,所以当我向左移动时,我发送的是一个负速度值。因此,它试图以小于零的速度从一个位置到另一个位置,因此它不会移动。通过使用我的速度因子的绝对值来解决问题。