Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在设备之间实时同步统一物理?(谷歌统一游戏插件)_C#_Unity3d_Google Play Services_Rtmp - Fatal编程技术网

C# 如何在设备之间实时同步统一物理?(谷歌统一游戏插件)

C# 如何在设备之间实时同步统一物理?(谷歌统一游戏插件),c#,unity3d,google-play-services,rtmp,C#,Unity3d,Google Play Services,Rtmp,我正在Unity中开发实时多人游戏。通过Google Play Game服务建立两名玩家之间的连接。 弹弓动作射击的一个简单例子:玩家用手指拉动橡皮进行射击。唯一重要的初始数据是橡胶在玩家释放之前的位置,所以它的坐标会发送到其他设备上。在这个射弹获得速度(RigidBody2D.velocity=newVector2(…))并飞行之后 问题在于,拥有相同的初始数据和执行相同的代码可能会击中一台设备上的目标,而错过另一台设备。Unity的物理引擎不是有限状态引擎,可能会在不同的设备上进行不同的模拟

我正在Unity中开发实时多人游戏。通过Google Play Game服务建立两名玩家之间的连接。
弹弓动作射击的一个简单例子:玩家用手指拉动橡皮进行射击。唯一重要的初始数据是橡胶在玩家释放之前的位置,所以它的坐标会发送到其他设备上。在这个射弹获得速度(
RigidBody2D.velocity=newVector2(…)
)并飞行之后


问题在于,拥有相同的初始数据和执行相同的代码可能会击中一台设备上的目标,而错过另一台设备。

Unity的物理引擎不是有限状态引擎,可能会在不同的设备上进行不同的模拟。但是,我还是以一种简单的方式在一个基于物理的2d游戏中使用了它,效果非常好。以下是我遵循的步骤:
1.每次移动之前,我都要确保网络设备上的每个物理对象都位于同一位置。
2.在本地玩家中为玩家对象添加了力。然后通过网络将力的位置和方向发送给其他设备。然后根据它在其他设备上进行模拟。
3.移动完成后(换句话说,所有刚体都停止),再次检查所有设备上的位置、旋转是否相同。如果没有,则根据做出移动的本地玩家将其对齐


重复上述步骤。第三步是在我采取下一步行动之前,100%确保所有设备中的所有对象都是同步的。

你不能只在本地玩家和同步位置上模拟射击吗?为什么不试试UNET呢,它更容易用于多人游戏