我正在开发一种使用套接字以恒定速度运行的多人游戏。玩家只能跳。它们的移动具有恒定速度,如下面的FixedUpdate中所述。 (也尝试更新)在客户端上,我以300毫秒的延迟启动敌人,以在到达跳转位置之前获取其跳转信息。
//运行
body.velocity = new Vector2(runSpeed, body.velocity.y);
//跳转
body.velocity = new Vector2(body.velocity.x, jumpForce);
我有2个想法可以同步他们的跳动。
1)玩家跳跃时,我向其他客户发出跳跃x,y的确切位置。在另一个玩家中,当我获得有关敌人跳跃的信息时,当敌人仍在其跳跃位置之后时,我不会对其进行任何操作。当它过去或在跳跃点上时,我突然将玩家移动到0.3ms的跳跃位置(具有精确的物理性),并向敌人施加跳跃。
2)我计算每次应用于玩家和每个敌人的速度。跳跃时,我会发出该计数,而在另一位玩家的侧面,当跳跃的敌人与其跳跃具有相同的计数时,我会施加跳跃。
这些是我的想法,即使在物理上运行时也有所不同。它与跳跃无关,我有2台计算机,并且我同步了代码并在两台计算机上启动游戏,而且我从不执行任何用户操作。我只是将transform.position.x和transform.position.y打印到屏幕上。但是它们是不同的,我认为这是造成我的同步问题的原因。我不能在不同的计算机上拥有完全相同的物理原理,但是源代码也一样。.请帮助。
在代表不同计算机上游戏的两张图片中,我从未触摸过按钮
答案 0 :(得分:3)
团结没有确定性的物理学。由于固定时间间隔之间的微小差异,因此在2个不同的设备上模拟相同的情况不会返回相同的结果。
您可以模拟每个播放器,但不能依赖于两个播放器在每台计算机上的位置完全相同。有几种方法可以解决此问题,但最终结果将是所有计算机都需要偶尔进行同步。