专栏首页韩伟的专栏格斗类帧同步游戏的优化
原创

格斗类帧同步游戏的优化

由于现在4g手机网络越来越普及,绝大多数用户的时延都可以在150ms以内,所以一些快节奏的帧同步网络游戏开始大行其道,现在最火的帧同步游戏无疑是某农药了。帧同步技术除了可以用来做MOBA类游戏,同样可以用来做需要大量快速操作的格斗类游戏,本文就是尝试提出一些解决帧同步方案下格斗游戏的优化措施。

(本文中涉及一些使用Unity引擎的术语,但大多数其他游戏引擎也有类似的概念,所以并不仅仅是针对使用Unity的游戏)

概念

我们一般认为,LockStep游戏由于网络延迟,画面的反应会比直接本地渲染要慢很多,所以我们希望画面能对玩家的输入有即刻的反应。但也希望对其他用户的交互是一致的。

所以有一些游戏采用所谓“预渲染”策略:

一、逻辑与渲染分别驱动:所谓渲染模块,就是用来给本地客户端表现的画面,使用本地渲染驱动,也就是Unity的Update()事件;所谓逻辑模块,就用来运行所有的攻击判定(角色位置、攻击与受击区域)的变化,使用服务器发来的网络包进行驱动,也就是通过同步服务器得到包后再运行。

二、纠正渲染误差:由于本地客户端驱动导致的表现,可能和网络包驱动的情况不一致,所以需要某些机制予以纠正,使两者的差异不要太大。一般采用的策略有两个:一是定时同步。预渲染的角色,每隔200ms(可以设置成其他值),就停止运行,等待逻辑角色的状态和自己同步。——这种策略适合那种走走停停的角色行为;二是对于某些输入,比如释放攻击技能,或者受到攻击,逻辑角色启动对预渲染角色的纠正。纠正内容包括位置的拉扯(可以是瞬时或者平滑过程)和播放对应的动画(如播放受击动画)

动画分线

  • 以Sprite组合的Animation为“渲染角色”
  • 以Collider组合的Animation为“逻辑角色”
  • “渲染角色”动画由Update()事件驱动,同时负责向同步服务器发出操作
  • “逻辑角色”动画由同步服务器收包得到的数据驱动
  • Update()事件每秒60个调用,而从同步服务器收包操作,一般每秒15-30个调用,所以,每次“逻辑角色”动画或位置更新,都要以x4 – x2的倍速来运行

如上图所示,“逻辑角色”和“显示角色”在很多时候,并不重合,可能存在位置不一致、播放的动画状态不一致的情况。上图就是在玩家按下“向右移动”按钮后的15ms时出现的情况。这就需要在一些时机,以“逻辑角色”为准,来修正“显示角色”的状态。

渲染纠正

移动行为纠正:

  • 每隔固定的时间(推荐200ms),停止渲染角色的移动以及发送移动指令到网络。等待逻辑角色的位置和渲染角色的位置重叠。
  • 如果等待时间超过固定间隔(推荐1000ms)还没有能让两角色位置一致,则直接将渲染角色拉扯到逻辑角色位置上,使之一致。

战斗行为纠正:

  • 每次释放技能(本地渲染),如果渲染角色和逻辑角色直接的位置差异大于固定值(推荐100像素),则立刻拉扯渲染角色到逻辑角色位置。
  • 每次释放技能(本地渲染)结束后,等待固定间隔(推荐100ms)后,才接受新的输入指令。

  • 每次技能命中(逻辑渲染)后,立刻对受击方进行位置拉扯,使渲染角色和逻辑位置一致。

总结

使用预渲染技术的最重要策略,还是坚持帧同步的原则:相同的输入,得到相同的输出。而预渲染的方案,是把那些严格同步的游戏逻辑、与其表现区分开来,这样可以专门的去让画面看起来更流畅,同时不影响帧同步游戏的“一致性”。由于存在一个“看不见”但正确的逻辑模型,所以只要想办法尽量“好看”的把表现纠正到正确的位置或状态即可。这种纠正可以利用游戏中的各种“不可操作”时机,或者其他游戏特色中可以利用的条件,来让纠正尽量不影响游戏体验。

本文来自 韩大 微信公众号

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器学习能在游戏开发中做什么

    机器学习很容易让人联想到在游戏中的角色 AI 。一直以来游戏中 NPC 或怪物的 AI 问题都是一个游戏比较难解决的问题。比如游戏的角色行为过于单一,让玩家乏味...

    韩伟
  • 教育应该向王者荣耀学习的地方

    电子游戏又一次因为《王者荣耀》被说成是毁灭人生的电子海洛因,这不是第一次,也不会是最后一次。尽管学习知识和玩游戏,本身并没逻辑上的对立,但大家都会想,为什么玩游...

    韩伟
  • 分布式本质论:高吞吐、高可用、可扩展

    大量用户访问同一个互联网业务,所造成的问题并不简单。从表面上看,要能满足很多用户来自互联网的请求,最基本的需求就是所谓性能需求:用户反应网页打开很慢,或者网游中...

    韩伟
  • Linux内存寻址之分段机制及分页机制【转】

    本文涉及的硬件平台是X86,如果是其他平台的话,如ARM,是会使用到MMU,但是没有使用到分段机制; 最近在学习Linux内核,读到《深入理解Linux内核》...

    233333
  • 动态 | 吴恩达宣布女儿 Nova 出生,她将和 AI 一起成长

    AI 科技评论按:2 月 7 日,也就是刚刚过去的春节期间,吴恩达的女儿 Nova 出生了,这是他和妻子 Carol 的第一个孩子。

    AI科技评论
  • AI一分钟 | NLP先驱Aravind Joshi教授去世,曾获ACL终身成就奖;年度花木兰诞生,甘薇全权负责贾跃亭的一地鸡毛

    一分钟AI 人民日报展望2018,深耕无人驾驶、智慧城市、医学图像和语音识别,中国人工智能有望“弯道超车”。 美国科学家开发机器人“预见”功能,通过视频识别技术...

    AI科技大本营
  • 一些VR延迟优化方法

    逍遥剑客
  • 深度学习驱动智能搜索引擎,RankBrain革了SEO的命

    【新智元导读】想在谷歌或百度等搜索结果中排名靠前,除了广告(给钱),你还可以选择SEO(搜索引擎优化):让网站符合算法的规则,提升在搜索引擎内的自然排名。但去年...

    新智元
  • ubuntu16.04打造vim和pyt

    用户2398817
  • 共建重庆工程学院腾讯云大数据学院,助力培养大数据智能化专业人才

    8月25日上午,重庆市有关领导与腾讯公司董事会主席兼首席执行官马化腾等腾讯公司高层,共同出席了腾讯西南总部大厦启用典礼仪式。 会上,重庆市政府与腾讯公司签署全...

    腾讯智慧教育

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动