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来连接。 (编辑:二游网_173173游戏网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |