我正在尝试使用Bullet实现客户端/服务器物理系统,但是我在使事物同步方面遇到问题。
我实现了一个自定义运动状态,该状态可以从我的游戏对象读取和写入转换,并且可以在本地运行,但是我尝试了两种不同的网络游戏方法:
- 使客户端上也在服务器上的动态对象(例如,不是随机碎片和其他不重要的东西)成为运动学对象。这可以正常工作,但对象移动得不太平稳
- 对象在这两者上都是动态的,但是在服务器发出的每个对象移动的消息之后,我将线速度和角速度设置为服务器上的值,并使用服务器上的转换调用btRigidBody :: proceedToTransform。我也叫btCollisionObject :: activate(true); 强制更新对象。
我对方法2的意图是基本上执行方法1,但是劫持Bullet进行穷人的预测,而不是自己动手解决方法1,但这似乎行不通(原因并非100%明确我什至单步执行“项目符号”,并且有时这些对象最终会出现在不同的位置。
我朝着正确的方向前进吗?Bullet似乎内置了自己的插值代码。那可以帮助我使方法1更好地工作吗?还是我的方法2代码不起作用,因为我不小心踩了它?
编辑:我刚刚注意到的方法1的另一个问题是,碰撞响应将与非同步对象发生碰撞。动能体有时会射出无限的东西,因为它们无法被击退。