麻豆 人妖

你的位置:淫荡妈妈 > 麻豆 人妖 >

大香蕉网 上线十年,月活过亿,《欢快消消乐》若何用100天完成小游戏搬动?

发布日期:2025-07-03 17:04    点击次数:83

大香蕉网 上线十年,月活过亿,《欢快消消乐》若何用100天完成小游戏搬动?

先作念减法,再作念加法。‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍整理/林致6月25日,在腾讯举办的微信小游戏开拓者大会上,乐元素的祥一共享了《欢快消消乐》搬动小游戏平台的竣工历程。这款上线跨越十年的三消游戏,于今依然保握月活超1.3亿、畅销榜常驻Top20的巩固分解。2024岁首负责上线微信小游戏后,很快再次勾引了多半玩家关注。在这场搬动中,他们碰到的最浩劫题是:原来跑在手机App上的复杂动画和上万关卡内容,如安在小游戏这种性能受限的环境里畅通运行?团队最终用「先作念减法,再作念加法」的念念路,从剔除冗余功能到并行推动各项开拓,硬是在100天内完成了上线。以下为共享内容整理,为便捷阅读,内容有所和谐。

图片大香蕉网大香蕉网

全国好,我叫祥一,来自乐元素,今天给全国共享《欢快消消乐》团队将APP手游搬动到小游戏的整个历程。《欢快消消乐》是一款国民游戏,信赖在座的好多东谈主或者我方的亲一又皆曾玩过这款游戏。咱们在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团队的粗心复古,极大推动了决议落地。

图片

以上等于我的共享,谢谢全国! 本站仅提供存储工作,悉数内容均由用户发布,如发现存害或侵权内容,请点击举报。