我正在开发一个多人游戏,使用套接字,玩家以恒定的速度运行。玩家只能跳跃。它们的移动具有恒定的速度,如下所示在FixedUpdate中应用。(也尝试过更新)在客户端,我用300ms的延迟启动敌人,在他们到达跳转的位置之前获取他们的跳转信息。
//运行
body.velocity = new Vector2(runSpeed, body.velocity.y);//跳转
body.velocity = new Vector2(body.velocity.x, jumpForce);我有两个想法来同步他们的跳跃。
1)当玩家跳跃时,我将跳跃的确切位置x,y发送给其他客户端。在另一个玩家中,当我得到关于敌人跳跃的信息时,当敌人仍然在跳跃位置后面时,我不会做任何事情。当它通过或在跳跃点上,我突然移动玩家到跳跃位置在0.3毫秒(有精确的物理),并应用跳跃对敌人。
2)我计算每次应用于玩家和每个敌人的速度。当跳跃时,我发出该计数,并且在其他玩家一侧,当被跳跃的敌人具有与其跳跃相同的计数时,我应用跳跃。
然而,这些都是我的想法,即使运行物理是不同的。这不是关于跳跃,我有两台计算机,我同步代码,并在两台计算机上开始游戏,我从来不做任何用户操作。我只需在屏幕上打印trans.position.x和to .position.y。然而它们是不同的,我认为这就是我的同步问题的原因。我不可能在不同的计算机上有完全相同的物理,但是有相同的源代码..请帮帮忙。
在这两张代表不同电脑上游戏的图片中,我从来没有碰过一个按钮


发布于 2019-11-12 04:30:20
Unity没有确定性的物理学。由于固定时间间隔之间的微小不一致,在两个不同设备上模拟相同的完全相同的情况将不会返回相同的确切结果。
您可以模拟每个玩家,但您不能依赖于两个玩家在每台机器上处于完全相同的位置。有几种方法可以处理这个问题,但最终的结果是所有机器都需要偶尔同步。
https://stackoverflow.com/questions/58807516
复制相似问题