格斗类帧同步游戏的优化
(本文中涉及一些使用Unity引擎的术语,但大多数其他游戏引擎也有类似的概念,所以并不仅仅是针对使用Unity的游戏)
概念
我们一般认为,LockStep游戏由于网络延迟,画面的反应会比直接本地渲染要慢很多,所以我们希望画面能对玩家的输入有即刻的反应。但也希望对其他用户的交互是一致的。
所以有一些游戏采用所谓“预渲染”策略:
一、逻辑与渲染分别驱动:所谓渲染模块,就是用来给本地客户端表现的画面,使用本地渲染驱动,也就是Unity的Update()事件;所谓逻辑模块,就用来运行所有的攻击判定(角色位置、攻击与受击区域)的变化,使用服务器发来的网络包进行驱动,也就是通过同步服务器得到包后再运行。
二、纠正渲染误差:由于本地客户端驱动导致的表现,可能和网络包驱动的情况不一致,所以需要某些机制予以纠正,使两者的差异不要太大。一般采用的策略有两个:一是定时同步。预渲染的角色,每隔200ms(可以设置成其他值),就停止运行,等待逻辑角色的状态和自己同步。——这种策略适合那种走走停停的角色行为;二是对于某些输入,比如释放攻击技能,或者受到攻击,逻辑角色启动对预渲染角色的纠正。纠正内容包括位置的拉扯(可以是瞬时或者平滑过程)和播放对应的动画(如播放受击动画)
动画分线
·以Sprite组合的Animation为“渲染角色”
·以Collider组合的Animation为“逻辑角色”
·“渲染角色”动画由Update()事件驱动,同时负责向同步服务器发出操作
·“逻辑角色”动画由同步服务器收包得到的数据驱动
·Update()事件每秒60个调用,而从同步服务器收包操作,一般每秒15-30个调用,所以,每次“逻辑角色”动画或位置更新,都要以x4 – x2的倍速来运行
如上图所示,“逻辑角色”和“显示角色”在很多时候,并不重合,可能存在位置不一致、播放的动画状态不一致的情况。上图就是在玩家按下“向右移动”按钮后的15ms时出现的情况。这就需要在一些时机,以“逻辑角色”为准,来修正“显示角色”的状态。
渲染纠正
·移动行为纠正:
§每隔固定的时间(推荐200ms),停止渲染角色的移动以及发送移动指令到网络。等待逻辑角色的位置和渲染角色的位置重叠。
§如果等待时间超过固定间隔(推荐1000ms)还没有能让两角色位置一致,则直接将渲染角色拉扯到逻辑角色位置上,使之一致。
·战斗行为纠正:
§每次释放技能(本地渲染),如果渲染角色和逻辑角色直接的位置差异大于固定值(推荐100像素),则立刻拉扯渲染角色到逻辑角色位置。
§每次释放技能(本地渲染)结束后,等待固定间隔(推荐100ms)后,才接受新的输入指令。
§每次技能命中(逻辑渲染)后,立刻对受击方进行位置拉扯,使渲染角色和逻辑位置一致。
总结
使用预渲染技术的最重要策略,还是坚持帧同步的原则:相同的输入,得到相同的输出。而预渲染的方案,是把那些严格同步的游戏逻辑、与其表现区分开来,这样可以专门的去让画面看起来更流畅,同时不影响帧同步游戏的“一致性”。由于存在一个“看不见”但正确的逻辑模型,所以只要想办法尽量“好看”的把表现纠正到正确的位置或状态即可。这种纠正可以利用游戏中的各种“不可操作”时机,或者其他游戏特色中可以利用的条件,来让纠正尽量不影响游戏体验。
相关知识
格斗类帧同步游戏的优化
森林之子卡顿掉帧优化攻略详情
《狂野之心》掉帧怎么解决 掉帧问题处理方法
《黑神话 悟空》垂直同步调整方法详解 优化游戏体验的必备技巧
win7怎么优化游戏帧数 win7游戏帧数优化教程
《战地2042》大场面掉帧解决方法
手游后台PVP系统网络同步方案总结
《FIFA23》掉帧怎么办 掉帧解决方法介绍
艾尔登法环:如何关闭与调整垂直同步设置,优化游戏性能指南
游戏开发当中有哪些性能优化的技巧 – PingCode
推荐资讯
- 1老六爱找茬美女的烦恼怎么过- 4999
- 2博德之门3黄金雏龙法杖怎么得 4867
- 3《大侠立志传》剿灭摸金门任务 4312
- 4代号破晓官方正版角色介绍 4023
- 5赛马娘锻炼到底的伙伴支援卡事 3802
- 6闪烁之光11月兑换码大全20 3774
- 7原神原海异种刷怪路线-原神原 3547
- 8爆梗找茬王厕所特工怎么通关- 3542
- 9《我的世界》领地删除指令是什 3440
- 10原神开局星落湖怎么出去 原神 3426