《轩辕传奇手游》主程序带你拆解MMORPG游戏客户端

微信公众号“腾讯游戏学院” 2018-10-22
讲师简介:王春贺,腾讯互动娱乐北极光工作室群客户端组主程序。拥有10年程序开发经验,参与过端游、页游、手游等类型游戏的开发,现担任《轩辕传奇手游》项目组客户端主程序。

下文为《〈轩辕传奇手游〉客户端分享》内容节选

01、客户端框架

《轩辕传奇手游》的客户端框架可以用一张图来描述:左边的基础框架相当于游戏运行的核心库,建立在Unity引擎的基础上,集成第三方插件,包括阿波罗组件、NGUI、LUA、VAS,其中基础模块包含场景模块、UI模块、脚本模块、特效模块、网络模块、资源模块等等;右边是Game Play,包括引导系统、经济系统、副本系统、成长系统等逻辑模块以及场景、角色、技能、体验等。

客户端框架示意图(点击图片,可放大查看)

玩家在登录游戏时,首先通过微信和手机QQ接入,再和游戏服务器进行通信。基本上,所有的数据计算都是在服务器进行,这样就可以保证游戏不会因为别人利用外挂,而产生一些经济上的损失。

02、开发工具

用于支撑游戏的工具包括场景、技能、模型等,做好这些工具能够大大地提高游戏的开发效率。

1、场景地图

相对其他较为早期的手游,《轩辕传奇手游》的场景地图非常大,这对于手机性能来说,是个瓶颈。当时,市面上其他游戏的做法,是在游戏进入一个新的场景的时候,把所有场景的资源都加载进来。这种做法,使得游戏在低端手机上加载地图场景时,内存、CPU、GPU都难以负荷。因此,《轩辕传奇手游》针对这个问题做了一个Streaming加载,就是流式加载,可以理解为动态的按需加载。这个方法使得游戏在加载大场景时也可以流畅地运行。

分析

但完全的流式加载,可能会无法兼顾远景,并非最好的选择。因此,《轩辕传奇》手游采用的是混合式加载,即先加载基础场景,比如天空盒、标志性建筑等,等玩家进去后,再使用流式加载,如此效果会更好。

在地图场景里,还有非常重要的一点,就是寻路。传统的寻路是采用A*算法,但对于大场景来说,A*算法的效率很低。所以,需要对场景进行分层,即HPA,把场景进行划分,进行预计算,再用A*算法,可以大大缩减寻路时间。

2、技能

游戏中每一个效果是一个TimeLine(时间轴)序列,由一组轨道组成:动画、特效、声音或其他事件。技能扩展性强,所见即所得。比如我想加一个变身,只要在这个时间轴上再扩展一下,增加一个变身的事件,就可以实现变身效果。

游戏技能截图

3、客户端框架更新方案

游戏经常会有内容更新和bug的紧急修复,更新分为两种:一种是大版本的更新,比如说两个月更新一个大版本,整个安装包全更新;还有一种是热更新,就是资源更新。

在iOS上有一个政策,游戏的可执行文件是不能直接更新的,必须通过App Store审核,但它的审核时间很长,每一次大概需要两三天左右。一旦游戏需要紧急修复bug,《轩辕传奇手游》就会采用一个热更新的方案。游戏大部分的代码都是通过LUA来做的,LUA是一个宿主型语言,它可以嵌入在游戏的原生语言当中,把LUA作为一种资源,打包之后,有问题就可以直接把LUA的代码更新。这样就可以保证,游戏每个版本都不用去进行原始包更新,只要做一个LUA的增量更新就可以。

热更新流程

03、性能优化

多人大规模PK的高频率出现,会导致手机的性能、发热、耗电等问题,这让《轩辕传奇手游》的开发者必须重视游戏的开发效率和性能效率。作为开发者,要从代码做起,保持代码清晰规范、简洁高效,并且定期地、持续地去优化代码,进行代码的Review。

在客户端代码本身没有问题的情况下,需要具体分析,找出瓶颈在哪里,然后指定一个策略进行全局的优化。策划、美术、程序、测试都要一起去解决问题,才能给玩家很好的游戏体验。

来源:微信公众号“腾讯游戏学院”
原地址:https://mp.weixin.qq.com/s/Pw6v4PRXs19737L9xLFEFg


最新评论
暂无评论
参与评论

商务合作 查看更多

编辑推荐 查看更多