2025-07-22 06:55 点击次数:61
先作念减法九游体育娱乐网,再作念加法。
整理/林致
6月25日,在腾讯举办的微信小游戏征战者大会上,乐元素的祥一共享了《快乐消消乐》迁徙小游戏平台的圆善历程。
这款上线越过十年的三消游戏,于今依然保捏月活超1.3亿、畅销榜常驻Top20的踏实推崇。2024岁首持重上线微信小游戏后,很快再次劝诱了大都玩家关注。
在这场迁徙中,他们遭受的最浩劫题是:原来跑在手机App上的复杂动画和上万关卡内容,如安在小游戏这种性能受限的环境里流通运行?团队最终用「先作念减法,再作念加法」的想路,从剔除冗余功能到并行股东各项征战,硬是在100天内完成了上线。
以下为共享内容整理,为便捷阅读,内容有所调养。
大家好,我叫祥一,来自乐元素,今天给大家共享《快乐消消乐》团队将APP手游迁徙到小游戏的通盘这个词流程。
张开剩余92%《快乐消消乐》是一款国民游戏,信赖在座的许多东谈主或者我方的亲一又都曾玩过这款游戏。
咱们在2014年在iOS平台上线,到咫尺为止,游戏运营如故有11年以上的时候。咱们陆无间续又发布了安卓版块,并在2024年上线了鸿蒙版块。咫尺,干线关卡如故越过一万关,每周会更新30个以上的关卡。
在这样多关卡内容和行动玩法的基础上,将这款App游戏迁徙到小游戏平台,职业量曲直常大的。因为历史积贮下来的功能、行动和代码相当多,而且还需要兼容已有的平台,是以全体职业的复杂度比拟高。
咱们迁徙的主要挑战是将App端的通盘这个词手艺架构迁徙到小游戏端。
App昔时是用Cocos加Lua征战的,咫尺要迁徙到小游戏端,而小游戏只可运行在App中的一个GS环境下。如果在小游戏中无间用Lua去运行,就会造成一个臆造机中套一个Lua臆造机的模式。但咱们无法幸免这种模式,不然App征战业务和小游戏征战业务就需要走两套代码,征战资本会相当高。
因此,在小游戏端,咱们领受的架构是基于WebGL,用Unity导出代码,况且业务逻辑依然跑在Lua中。不外,这种情况下小游戏中Lua的运行效用会相对低一些。
咱们在前期把最中枢的内容索要出来,领受了最小上线规模。作念初版时,干线关卡需要上线1005关,后期调养到了2010关。
另外,《快乐消消乐》是一款如故在运营的游戏,是以咱们但愿给用户提供一致的体验。不管是在App上玩照旧在小游戏中玩,咱们都但愿用户账号是互通的,数据钞票是一致的,参与的行动、领取的谈具和素材资源在两个平台都不错通用。
因此,咱们需要一个通用的体系,一些中枢功能、谈具和支付都需要撑捏。
此外,在小游戏上咱们也但愿能够提供细致的体验,帧率需要达标,启动时候也需要达标。
对咱们来说,挑战最大的少许是时候相当迫切。咱们接到任务的时候,简短惟有三个月的时候需要完成上线,是以其时的时候压力相当大。
小游戏的运行性能亦然一个挑战,因为它运行在GS环境下,效用自身就打了很大的扣头。证据官方公布的测试终结和咱们我方的测算,可用性能省略惟有Net5的三分之一傍边,而且还无法使用多线程干系的手艺,因此在性能优化上靠近很大的挑战。
迁徙职业的第一个设施是先阐明咱们的最小考据集。
《快乐消消乐》的中枢玩法等于打关,如果打关无法平时进行,后续职业基本也无法开展。UI的展示主要使用的是Spine动画,如果运行效用相当低,后续险些通盘决议都需要推倒重来。在最小考据集通过之后,咱们开展了业务逻辑移植、小游戏平台才略接入、测试和优化,临了完成上线并进行功能迭代和玩法优化。
前期的最小考据集对咱们来说是挑战最大的一部分。
咱们的游戏是在Cocos2dx基础上征战的App版块,其时是为了知足居品需求以及快速上线考据,功能征战也很凯旋。但跟着这几年的运营,咱们发现居品在推崇力、玩法内容以及3D建模等方面都有了更多新的需求。
因此,咱们此前就如故初始准备Cocos向Unity的迁徙。此次迁徙也借机将刊行小游戏时Unity版块导出小游戏行为主攻方向。不外在客户端上,咱们还需要考据运行时能否在WebGL上平时运行。
运道的是,咱们Cocos导出的版块在去除联网功能后,在WebGL版块上高端机不错打出50帧傍边,低端机也能达到十几帧,这让咱们看到了但愿,至少运行起来莫得太大问题。
在Unity上,咱们相似需要考据运行终结。咱们测试了一个典型的Spine动画场景,放入了许多动画,运行效用基本达标,但仍有不少动作需要进一步优化。
职业流的方向和全体框架已笃定,接下来的中枢职业包括代码和资源的迁徙——干系内容需要迁徙到WebGL上。
在小游戏上,通盘及时加载动作都是异步加载,而App上由于性能好,许多加载是同步的。这些在小游戏里无法使用,是以App端底层架构中最基础的文献加载、资源加载都需要再行迁徙。
咱们通过分析建设文献和Lua代码,将通盘援用到的资源进行自动化分类,按不同的拦阻称号、不同的关卡段分派到Unity的不同BundleGroup上,并自动化生成Bundle。
经过以上几个设施,咱们基本完成了一个能够在客户端、Unity和Web端平时运行的圆善版块。下一步等于处理平台各异和适配的问题。
在小游戏平台,咱们需要初度接入许多第三方接口,还需要对接小轨范的API和征战才略,撑捏登录、支付、告白等干系功能。
第一个版块跑起来后,咱们很天然地遭受了许多问题,主要包括卡顿发烧、帧率不高、内存不及导致的卡死或报错、终结不适当预期等。
由于最小考据集阶段对好意思术资源压缩率条目相当高,手艺层面主淌若保证跑起来和可见,终结方面好意思术团队信服无法招揽。因此,后期需要在好意思术压缩纹理上适当提高,迟缓完善终结。纹理品性等方面需要与好意思术团队一齐在终结和资源之间寻找均衡,争取既能跑起来又能知足终结条目。
背面还会先本心多优化技巧,但优化的前提是能够造成量化见地。惟有量化了性能数据,后续的具体优化动作、流程和终结才有依据。
咱们使用的性能分析器具大家也比拟熟悉,比如Unity的UnityProfiler、MemoryProfiler、FrameDebugger,这些器具比拟完备,亦然咱们领受Unity的原因之一。
微信征战者器具也提供了熟练的器具,如Performance器具和CPUslowdown功能,不错放大CPU的运行职业,匡助咱们更容易发现CPU层面的问题。
在征战机上跑得再好、再流通,也不成代表用户的内容体验终结,因此最终咱们实在关切的是真机上的推崇。
将真机Profile和Performance器具导出的数据导入到Chrome器具中后,咱们看到的还原终结与征战机上的终结基本一致,这套器具也相当好用。
关于小游戏的内容优化技巧,文档和征战者最好试验中也列出了相当多的细项,咱们基本上都逐一落实。不外对咱们来说,最中枢的优化照旧鸠合在两个方面:内存优化和计较优化。其他大多数优化行动都是围绕这两点的扩展或延迟。
在小游戏,尤其是微信小游戏上,iOS的高性能+模式相当要道。它决定了咱们的可用内存和效用提高。
在iOS高性能+模式下,微信小游戏会把小游戏运行在一个单独的进程中,内存空间的分派十足不同,这对内存使用匡助很大。另外,WASM分包对内存分化终结显赫;缩短渲染永别率亦然一种立竿见影的优化行动。
天然方法肤浅,但关于咱们领先App端假想720宽的渲染终结而言,将渲染缩短到方向永别率再放大,无论是对帧率的提高照旧内存占用的缩短,都相当彰着。预加载资源和用户数据在小游戏上也极为明锐,不管是使用量照旧加载速率,尤其影响启动时候。因此,能并行处理的操作咱们尽量并行试验,以显赫提高加载速率和启动效用。
在内存优化方面,通用的技巧主淌若处置内存裸露问题。
由于存在臆造机套臆造机的结构,各层内存都必须精准规章,Lua和GS环境自身也可能出现内存裸露。初期移植阶段咱们以速率优先,后期在迭代流程中迟缓处置了大都内存裸露问题。同期,资源按需加载、压缩纹理模式、WASM分包等行动都对提高加载速率、缩短内存占用有彰着匡助。对象池的使用也能缓解GC的压力。
Unity对小游戏导出的优化职业也作念了许多对标鼎新,因此通过Unity导出在性能上有彰着提高。关于GC频率,iOS和安卓的处理政策不同。微信小游戏在JS层会每10秒自动GC一次,但在Lua上咱们发轫莫得拔擢定时GC,这导致大掉落或关卡运行时可能激励内存问题。自后咱们在iOS上定时GC,在安卓上商量到低性能建设无法每每GC,只在每局终结后触发一次GC。
WASM分包是终结显赫的内存优化点。咱们的总函数目简短11万个,首包包含约1.8万个函数,未压缩情况下带美艳表的包大小约55MB。分包后首包约15.8MB,分包文献约40MB,两者不带美艳表时容量接近不分包时的体积。分包后代码量反而加多,是因为引入了大都干系检测、参数准备、很是处理等职业,导致代码存在冗余。
此外,通过br压缩可显赫缩短首包体积,从15.8MB压缩到3.4MB。分包最大刚正在于内存占用大幅缩短。官方文档指出GS代码约1MB对应内存占用10MB,分包40MB简短能缩短400MB的GS内存占用,为好意思术素材等留出空间,终结提高彰着。
在计较优化方面,咱们要点处置了几个问题。
小游戏性能简短惟有Net5的三分之一,计较优化如果不到位,性能压力会很大。咱们去掉了大都try-catch函数,因为WASM编削后代码扩张且查验支出高。臆造机嵌套结构导致参数传递存在多层装箱、拆箱,参数目大或参数个数多时影响更为彰着。
咱们也调养了小游戏的补帧逻辑。《快乐消消乐》的运行逻辑分为逻辑运算和渲染运算。逻辑帧定在30帧,如果大掉落时单帧运算超时,可能会出现卡顿。若捏续卡顿,在用户体验上就像参加“枪弹时候”。在App端,大掉落粗俗只影响1至2帧,很快能追回。但在小游戏上无法追帧,会导致连锁卡顿。
因此咱们优化补帧政策,仅追部分帧,同一可同一的逻辑,减少雪崩时事。同期,咱们优化了Lua-C#参数传递和JS接口调用,要点在业务逻辑上鼎新Lua代码结构,以支吾Lua试验效用的局限。
在优化Spine动画的试验中,咱们长久围绕两个中枢问题张开:计较破钞和内存占用。
Spine是《快乐消消乐》关卡内的主要推崇面孔,所磋磨卡拦阻和小动物绝大多数都采选Spine动画。在App端,Spine动画推崇终结好,优化空间大,但在小游戏端,这类动画带来了彰着的计较压力和内存问题。
在内存方面,咱们的优化行动包括缩短过火数、减少网格,以削弱计较职业。同期,在播放一致的Spine动画参加静止气象后,咱们会将其替换为静态图,以缩短内存占用和计较支出。关于不错替换的部分,咱们尽量替换;关于无法替换的动态内容,咱们采选减帧或抽帧的方式减少支出。
另一个要点是去除或优化Clip终结。在App端,好意思术为了推崇力大都使用Clip,但小游戏端无法很好撑捏,因此咱们和好意思术团队一齐去除了无用要的Clip,并对必须保留的Clip进行了好意思术和手艺两方面的优化,包括减少内存输出和提高使用效用。
此外,咱们引入了Mesh动画,将Spine动画计较流程中的三角形网格事先计较好并存储起来,运行时顺利援用静态Mesh资源,以内存换取CPU性能。这种方法在无法提前计较骨骼位置、需要与业务逻辑精细关联的场景中无法使用,举例通顺显现进程的星星瓶等。但咱们在这些场景中也进行了优化,将通顺进程细化为10个阶段,以缩短计较压力,终结基本能达到预期。
在API干系优化方面,小游戏对文献操作和API调用性能有限,且嵌套臆造机结构加多了支出。在App端,为齐备崩溃气象还原,玩家每次操作都需将气象写入磁盘。这在小游戏端导致彰着卡顿,因此咱们去掉了小游戏端的每每文献操作。
同理,音效播放也受到雷同扬弃,咱们简化了音乐播放功能,剪辑掉无用要的代码以提高效用并减少代码量。挪动终结也经过优化,在小游戏中只保留高、中、低三种挪动等第,去掉弧线规章,通过封装函数将挪动耗时从20毫秒以上降到几毫秒以内。
Lua代码优化亦然要点。咱们对比了Lua文本模式,发现加载效用影响不大,但文本代码体积更小,内存占用更低。天然查错时可读性下落,但都集字节码和文本混用,能在保捏性能的同期确保定位问题时信息圆善。
经过上述各项优化,咱们在约100天内完成迁徙并于8月上线测试。这时期莫得新增业务逻辑,仅完成从原生到小游戏的迁徙,职业量之大可见一斑。这离不开团队各部门的协同合营和多任务并行股东。
回来劝诫,咱们的中枢作念法包括:
1.先作念减法,再作念加法。优先剔除一切无用要内容,考据最小可用框架。一朝考据通过,再迟缓补充新功能。手艺选型如果一初始走弯路,代价会相当高。
2.尽量让通盘任务并行,作念好干系撑捏职业来加快征战进程。引擎优化、API接入、Spine渲染优化、业务移植、好意思术迭代、居品假想均可并行。惟有把通盘东西都并行起来,能力把通盘这个词时候往前移。
3.居品作念好短期和历久有计划,为此制定可行的征战筹算。《快乐消消乐》行为运营十年的游戏,内容量广宽,必须有计划好哪些内容实在需要迁徙到小游戏平台,幸免无效征战。
4.与公司里面和外部巨匠保捏疏导,以快速得到灵验决议。款式流程中,咱们得到了微信小游戏团队和Unity团队的放纵撑捏,极大推动了决议落地。
以上等于我的共享,谢谢大家!
游戏葡萄招聘内容编订九游体育娱乐网,
发布于:北京市上一篇:九游体育官网登录入口是拿着孩子奶粉钱去创业的-九游体育「NineGame Sports」官方网站
下一篇:没有了
Powered by 九游体育「NineGame Sports」官方网站 @2013-2022 RSS地图 HTML地图