大家好!
过去几个月里,我一直在为我的3D格斗游戏Rasen开发网络代码,我想与大家分享我的经验。
Unreal Engine系统
尽管我从一开始就知道GGPO网络代码,但我被工作量吓住了。因此,我开始使用延迟网络,之后尝试了Unreal的Character Movement Component,使用了Unreal Mover,并且在其基础上构建了一些自定义网络解决方案。
然而,这些方法都不能满足我这个快速、回避、重击等元素的游戏所需。
即使在低延迟的情况下,网络延迟也会显得非常高,或者会出现可见的校正和脱同步的动画。我的自定义动画同步也会与CMC的内置根动画同步和重击冲突,重击特别糟糕。
GGPO回滚网络代码
在尝试这些系统的过程中,我了解到了更多关于GGPO解决方案的知识。没有其他选择,我最终决定在Unreal Engine中实现自己的GGPO回滚架构,包括自定义的可预测物理和运动。
幸运的是,游戏已经被开发为离线玩法,因此我知道需要模拟什么。从一开始,我一直在尝试保持一切轻量、可预测和预计算的 wherever 可以。
经过约2个月的工作,经历了输入预测错误、运动错误和找到一种方法来烘焙并存储3D武器碰撞数据的困难,我终于成功了。
我惊讶于模拟的成本是:\~0.01ms 每个模拟 tick 与 8 个角色。快照大小似乎也很小:\~0.04 KB 每个角色。
结果 & 反思
游戏现在支持GGPO-style回滚网络代码,允许8个玩家同时在线游玩,保持控制响应即使在高延迟、抖动和数据丢失的情况下。
这是我到目前为止最具挑战性的系统。尽管最初很吓人,但最终它成为了我工作过的最有趣和最有成就感的系统。
我也制作了一个Youtube Devlog,展示了在各种压力测试下的游戏玩法,包括一些性能统计。
希望这会鼓励您尝试在您的游戏中实现自己的回滚网络代码,如果您的游戏遇到类似的问题。
评论 (0)