我正在使用 Unity 制作 1v1 多人游戏,例如 8 球台球。我目前使用的方法概述是: 1) 同步两个球员的每个球的位置。 2) 如果轮到玩家 1:将矢量 3 力施加到白球上并运行物理 3) 将玩家 1 的力发送到白球上并将其运行到玩家 2 上。 4) 一旦所有球静止或入袋,就改变转弯。
问题是,即使:白球的初始位置和施加的力对于两个玩家来说都是相同的。所有球的终点位置并不相同。我猜物理学中存在随机性。球的移动和行为不同,尤其是在碰撞后。这有点蝴蝶效应,两个玩家的球在 table 上的位置的最终结果是不同的。
我的问题是,你将如何制作一个 1v1 8 球池,其中有很多物体和物理现象,并确保两个玩家的一切都以相同的方式发生。
最佳答案
物理需要在应用程序的单个实例上发生,然后从那里传播到其他实例。换句话说,一个玩家应该是服务器+客户端,其他玩家应该是客户端。所有物理现象都发生在服务器上,客户端向服务器发送命令,例如施加在白球上的力、方向等。
用于网络的 Unity HLAPI:https://docs.unity3d.com/Manual/UNetUsingHLAPI.html
关于unity-game-engine - 使用 Firebase 实时数据库进行统一时,物理效果无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47395041/