在使用Godot的回滚物理的多人游戏中,设置玩家移动时,标准的输入处理立即会崩溃。如果你依赖于基本的输入检查来处理标准引擎的过程,网络抖动和延迟不匹配会迅速导致视觉卡顿、错误预测和丢失动作,如跳过跳跃。解决这个问题的关键是完全分离你记录输入和执行移动的方式。取而代之的是,在帧渲染时不处理移动,而是捕获输入到缓冲区中,只在网络tick时处理缓冲区中的状态。这给了客户端和服务器一个相同的输入历史,回滚时可以重放,保持局部移动的清晰度,同时保留网路编码的权威。要实际驱动所有这些在Godot中,我依赖于netfox来处理回滚框架,Rapier来处理物理。由于Godot的物理引擎不支持手动状态回放或步骤模拟,所以Rapier提供了物理回滚所需的快照和确定性步骤,netfox处理了tick循环和输入同步。 我正在制作一个全面的视频来展示代码实现和节点设置,如果你想在实践中了解它是如何工作的:https://youtu.be/sQ95uXMEBoE 我还建立了一个Discord社区,专门为Godot多人游戏开发者提供网路编码的故障排除、思想交流和进展分享。来加入我们,告诉我你有任何问题或反馈,或是想了解设置:https://discord.gg/TvdU4ZBTQa