参考知乎:https://zhuanlan.zhihu.com/p/341447703
外网:https://gafferongames.com/categories/networked-physics/
一个基于C#的3D定点数物理引擎:https://github.com/sam-vdp/bepuphysics1int
火箭联盟物理系统、网络同步讲解:
今天在跟龙哥讨论物理同步的时候,提到一个问题。有物理互动的游戏场景,应该如果进行网络同步?
假设有如图的场景,球接近A玩家,A玩家踢了球,而B玩家的网络卡顿了,对A玩家来说,他踢了球,而对B玩家来说,A玩家还没踢到球,
这就导致了逻辑上的不同步。而Unity3D的物理引擎,又是蝴蝶效应的,只要有一点偏差,最终结果会演算成完全不同的样子。
这就需要需要解决两个问题:
1.物理引擎必须保持一致性,在不同平台,不同机器,不同时间,对物理引擎输入同样的参数,输出的结果必须一模一样
2.不同玩家的本地物理引擎输入必须完全一致,比如A玩家往前走一步,B玩家里的A玩家也必须在同一时刻往前走一步,不能有任何延迟
对于问题1,就是采用定点数的物理引擎,因为浮点数,不同机器精度不同,稍微有一点点的误差,会导致结果演算完全不同,而定点数解决了这个问题。
U3D自身的物理引擎好像不支持修改为定点数,所以一般采用开源的第三方物理引擎自己修改。
问题2,
参考:
C [siː] 详细X 基本翻译 symb. 碳 (carbon) n. 字母C abbr. 可数名词 (countable noun) 网络释义 维生素C: Vitamin Vitamin C: 维生素C LDL-C: 低密度脂蛋白胆固醇 标签:同步,网络,玩家,引擎,定点数,物理 From: https://www.cnblogs.com/jeason1997/p/16598097.html