GMGC开发者训练营 盖娅互娱研发技术总监刘琛:MMORPG手游研发技术要点
Unity资源管理。Unity提供非常方便的资源管理机制,包括资源加载和卸载都有一整套的API。但Unity的资源管理和加载卸载有致命缺点,它的资源卸载虽然方便,但并不智能,也不精细,它的资源卸载是需要把所有的资源都检查一遍,然后确定不用了以后才会去释放,但这个检查是非常耗时的。一个地图的游戏会经常加载和卸载各种各样的资源,所以如果我说调用这种函数会造成非常卡的感觉,这是我们需要避免的地方。我们在资源管理方面是自己做的,生成assetbundle时,把资源的依赖建立好存在文件里,加载的过程中会加载引用计数,可以很快的加载和卸载资源,保障内存的控制。可能大家会想为什么Unity不好,因为Unity的资源是可以循环引用的。大家知道循环引用是引用技术里最不能避免的一种问题,但其实我们在游戏开发中很少会循环这种资源。Unity性能。UI要注意层级和模块的划分合理,很多的常用UI在隐藏时不要隐藏或者禁用,我们要移出摄像机的镜头,这样回来时不会有这种激活问题。关注Overdraw,我们之前有策划做UI用全透的底图,但虽然是看不见的但也会有损耗。场景方面,根据小场景和大场景,这是静态加载,静态Batch还是动态分块加载,这种性能表现的比较好。在地图上我们用LOD的办法,让大家在可以看到的范围内尽量减少渲染。角色方面控制面数和贴图的质量,大家想要一种在一起玩的感觉还是想要看到很多玩家在一起呢,所以要控制角色控制面数。Unity的动画文件很大。贴图压缩,在大家做手游的过程中,一定要使用跟平台相关的压缩原理,PVR很方便,但质量很低,所以在UI不能用,安卓可以用ETCD,因为现在安卓平台的支持广泛的就是ETC1,但它的问题在于没有贴图,但我们我们还要修改。制作的过程中大家尽量保持一致,但在打包的过程中,大家需要做好打包的脚本根据不同的平台压缩不同的纹理,生成不同平台的包。对象池和资源池,不是所有的资源不使用就要立即释放,还有关于频率和资源特性的策略,这样不至于平台的加载卸载消耗自己的网络。在合适的地方主动触发GC和Unity的资源清理。清理LOG输出和字符的串拼凑,有时候会造成CPU损耗。两个工具,Unity Profiler、Frame Debugger,要检查自己的性能到底损耗在哪里。UWA公司的文章非常干。
热更新是手游领域必须具备的功能,我们要注意文件分布的合理性,单包不能太大,如果太大的时候加载会耗时。策划配置是Lua,大部分的客户端逻辑,场景和战斗都是UI功能,所以Lua是热更新的重点。我们需要有版本控制机制去更新,使用版本控制文件,我们所有的资源和Lua根据版本打成差异包,客户端根据版本控制下载差异包。注意CDN缓存问题,很多重名的文件大家不要放在CDN上。域名劫持。
Lua,现在很多的框架都在用,但uLua是使用频率最高的,一部分是Lua的虚拟家,还有就是C#与Lua的应用。在一些非关键点,我们可以先GC,在卡的时间比较长的时候,我们可以再完整GC。Lua使用有非常严重的问题是内存泄露,主要的原因是Unity的Mono和Lua的虚拟家之间互相看不到,所以两个虚拟机之间的对象相互引用的时候,没有办法回收释放。一定要明确哪一些东西用,哪一些东西不用的。Lua性能,内存占用,削减文件大小。Lua的执行效率没有问题,但它在Lua和C#相互调用的时候效率很低,我们在开发的过程中把一些频繁调用的模块放在C#上,减少Lua与C#的相互调用。热更新是所有手游都要具备的,热更新里面最重要的就是使用Lua来连接。
MMORPG手游服务器的特点。在线实时交互,数据变动频繁响应要求高,大部分的逻辑在服务器完成,防止作弊。因为你做的事情别人也要看到,这样才会有世界的感觉,服务器的逻辑非常复杂,对服务器逻辑的编写要求高。手游领域要注意网络的稳定性,网络切换也会引起断线,所以断线的体验要做到无缝和舒适,要有离线的网络机制,这样离线了整个队伍可以继续玩,这是比较好的。代码和配置支持热加载,因为MMO系统很多,上线的测试比较短可能会遗留一些漏洞,如果在现场爆发出来对游戏的口碑造成很大的伤害,所以我们要支持在线解决一些漏洞的问题。开服一段时间以后,要有跨服和合服的机制。
各大游戏厂商服务器框架基本类似,大部分都会有网端服务器,这是服务客户端进行通信的。游戏服务器负责网络协议模块和数据库模块,绿色的部分是游戏里面比较重要的工作,逻辑部分,包括场景,战斗、属性、物品等各种各样的东西。会有公共的服务器来负责账号和登录,以及充值唯一名服务器用来保证名字。其它的部分主要看各团队熟悉什么,有自己编写的,也有引进的。
网络层有PCP、UDP、WebSocket、Http。协议层的主要功能是定义文件,客户端的服务器生成协议代码,发送接受协议,序列化和反序列化。网络层和协议层比较好的开源。数据库,多线程,利用CPU多核能力。支持事务,发生未知错误时保持数据完整。单服的读写功能是我们最关注的,支持合服和跨服。
打包和测试是MMO游戏研发到上线的最后一个环节,这个环节的效率和时间消耗可以保证游戏是否能够正常上线,或者说上线之前是否要通宵熬夜。不管是代码还是资源配置都需要SVN管理的,这分为开发版本和线上版本的分支。平时会在开发版本提交,但提交时需要有任务单号和漏洞,我们在任务和漏洞测试通过以后会把它挑出来合并到线上分支,这是半自动化的过程非常方便。合并完分支后可以自动化制作游戏包,相信大家会使用Jenkins的工具,看使用Unity还是自己的框架来写这些工具。如果使用Unity为了减少打包过程中的时间,建议对资源差异处理精细,不要重新导入打包。测试非常辛苦,研究研究自动化测试工具,基于操作的测试工具,基于Unity的测试工具,基于Lua脚本的测试工具,Lua是非常方便的脚本语言,目标是让测试人员很方便地写出自动化测试,减少测试中的工作量。机型适配测试,刚开始做手游会买很多设备自己做适配,但现在一方面引擎的通用化,受益于很多云测试平台可以方便准确地测试出游戏在安卓平台上的适配率。
仙剑的项目我们一直在摸索和学习,希望与大家一起探讨完善,能够给玩家提供更好的体验,谢谢大家。
关于GMGC:
GMGC成立于2012年9月,是全球第三方移动游戏行业组织,目前在全球拥有30多个国家或地区近300名会员企业,成员中包含开发商、发行商、服务商、投资商等。GMGC秉持“共建共享,合作共赢”的理念,为产业上下游企业搭建合作、交流、学习的平台,促进产业共同发展。
由GMGC主办的全球游戏大会(GMGC北京)、全球游戏开发者大会暨天府奖盛典(GMGC成都)、亚洲移动游戏大会(GMGC马尼拉)、中国(昆山)数字娱乐节(GMGC昆山)每年分别在北京、成都、上海、深圳、昆山乃至亚洲各大城市举办,上述活动已经发展成为业界最具规模和影响力的行业盛会,产业风向标。同时,GMGC还提供全方位的专属会员的服务项目,如创新沙龙、全球商务考察、CEO晚餐会、GMGC之夜等商务社交活动,帮助中外会员企业拓展业务及建立更多的伙伴关系并促进发展。
- 更多推荐:
- 网易云携游戏解决方案亮相GMGC,斩获最佳服务商奖项 GMGC·成都·2018 | 独立游戏开发者大赛落幕 《彩虹坠入》杀出重围 险胜折桂 GMGC·成都·2018 | OPPO小游戏商务负责人刘汉扬:对于即点即玩的小游戏 我们想做更多事情 GMGC·成都·2018 | vivo小游戏商务负责人程文杰:小游戏用户大部分非传统手游用户 是增量市场 GMGC·成都·2018 |育碧成都工作室李济潇:创造生机盎然的虚拟世界 GMGC·成都·2018 | 三七互娱海外负责人彭美:海外市场开拓的杀招—内容整合式营销 GMGC·成都·2018 第七届全球移动游戏开发者大会正式开幕 GMGC·成都·2018 | Google Play赵伊江: 东南亚核心打法 不要只顾买量 要多渠道整合