Why
为什么要引入物理引擎?
常见的需求是网络同步。
当下通用的网络同步方案有帧同步和状态同步。状态同步自然是要在服务器跑物理,帧同步本来可以只跑客户端,服务器只负责转发命令(事实上我们上一个帧同步游戏也是这么做的),但是存在两个问题,一是不同平台存在不同步的可能,因为引擎的物理引擎存在浮点运算,不同平台可能运算结果不一致(这个问题我们使用了截断三位小数后面的方法,不同步出现的概率大大地降低了);二是只跑客户端无法较好地做校验或者防作弊。
为什么是Bullet?
主要是项目接入的是Bullet,有一定的使用经验,另外Bullet的优点是项目结构相对简单,接入方便。当然Unity用的是PhyX,后续有机会也会开PhyX的坑。
What
学习Bullet的什么?
通用形状的碰撞体实现
碰撞检测实现
刚体实现
柔体实现
IK实现
优化手段
……
How
如何进行Bullet学习?
- 文档和资料
- Demo
-
这是一个Unity版的Bullet插件,有github版本,插件里将大量的C++接口暴露到了C#层,所以可以学到很多Bullet的概念,以及基础功能的实现。另外里面的bullet的dll是使用另一个github工程BulletSharpPInvoke编译出来的,更底层的代码还是得看编译工程。
-
bullet的github仓库,根据教程编译出vs工程,设置启动项目,运行VS即可看到demo工程。
- 源码
-
撸完1和2,对bullet的使用也大概有个底了,就可以直接撸源码了。
- 参考资料
未完待续 …