大家好!
过去几个月,我一直在为我的3D格斗游戏Rasen开发网络代码,我想分享一下我的经验。
Unreal Engine系统
虽然我从一开始就知道了GGPO网络代码,但我却被工作量吓得要死。因此,我开始使用延迟网络代码,然后尝试使用Unreal的Character Movement Component(角色移动组件),试验了Unreal Mover,并在其上构建了自定义网络解决方案。
遗憾的是,这些解决方案都不能满足我这个快速、对抗、反弹重击的战斗需求。
即使在低延迟的情况下,网络延迟也会感到非常高,或者会出现可见的校正和脱同步动画。另外,我自定义的动画同步也与CMC的内置根动画同步和反弹冲击发生了冲突,特别是反弹冲击非常糟糕。
GGPO回滚网络代码
在尝试所有这些系统的过程中,我对GGPO解决方案的了解越来越深。没有其他选择,我最终决定在Unreal Engine中实现自己的GGPO回滚架构,包括自定义可预测物理和运动以使其工作。
幸运的是,游戏已经先开发了离线模式,因此我知道需要模拟什么。从一开始,我一直试图使所有东西尽可能轻量、可预测和预计算。
经过约2个月的工作,多次与输入预测错误打交道,解决一些运动错误,找到一种方法来烘培和存储3D武器碰撞数据,我最终完成了它。
我惊讶于模拟成本如此低:约0.01毫秒每个模拟tick,8个角色。快照大小也似乎很小,约0.04KB每个角色。
结果 & 反思
游戏现在支持GGPO风格的回滚网络代码,支持最多8个玩家,保持控制响应即使在高延迟、抖动和数据丢失的情况下。
这是我到目前为止建造的最具挑战性的系统。虽然最初感到畏惧,但最终它成为我工作过的最有趣和最有成就感的系统之一。
我还制作了一个YouTube开发日志,展示了在各种压力测试下的游戏玩法,包括一些性能统计。
希望这能鼓励您尝试自己实现回滚网络代码,如果您的游戏遇到类似问题。
评论 (0)