我正在使用Godot开发一款2人合作的RTS/城防游戏,使用Steam网络。现在我正在检查我的架构,以便在我建立太多内容之前进行检查。
我的当前模型是主机认证:
- 主机拥有真实世界的模拟。
- 客户端发送输入/命令/请求给主机。
- 主机验证这些请求,执行它们在主机世界,然后复制结果回去。
- 客户端视觉效果如运动预测,攻击动画,粒子,UI等可以立即发生以提高响应速度。
- 但真实结果,如生成单位,伤害,死亡,箭头/投射物,AI和世界变化由主机决定。
- 目的是通过只有一个“真实”的模拟:主机的模拟来避免脱同步。
游戏有很多单位,所以我不确定我应该多么激进地使用网络更新。
目前,我正在减少单位快照频率以节省带宽,但这使得NPC/敌人运动在客户端看起来不那么平滑。所以我想知道这个类型的游戏中最佳实践是:
- 应该发送更少的更新并进行更多的插值吗?
- 应该优先考虑靠近玩家/摄像机/战斗的单位吗?
- 远处的单位是否应该以更低的频率更新或变得抽象?
- 对于RTS类游戏,主机认证快照是正确的方法,还是我应该寻找确定性的锁步?
另一个问题是近战/弓箭战斗的响应性。
如果我等待主机确认之前显示攻击反馈,客户端会感觉延迟。如果我立即在客户端显示预测反馈,主机可能会因为延迟而不同意。所以目前我在思考:
- 客户端立即播放攻击动画。
- 客户端可能显示暂时/预测的反馈。
- 主机决定实际的命中/伤害。
- 主机发送回命中/死亡/投射物事件。
- 客户端纠正如果需要。
这是否是正常的处理合作战斗的方式,还是有更干净的方法?
我建议:
- 高效同步大量RTS单位。
- 保持客户端战斗的响应性。
- 避免脱同步。
- 决定什么应该在本地预测vs由主机确认。
评论 (0)