Jam City如何为高性能构建迪士尼魔法匹配3D

Dec 3, 2025
迪士尼魔法匹配3D | Jam City | 迪士尼

迪士尼魔法匹配3D中,玩家被邀请恢复魔法书的秩序,这本魔法书的魔法失控,标志性的迪士尼和皮克斯物品洒落在页面上。玩家必须匹配被施了魔法的物品,整理这些奇幻的杂物,重新发现整理的乐趣,以恢复魔法书的秩序——每次一个舒适的关卡。

在开发过程中,每个Jam City团队设定了雄心勃勃的目标:艺术团队在严格的多边形预算内追求高视觉保真度;产品团队优化理想的会话时间目标;设计师确保新内容的持续流动,QA测试人员需要强大的工具。与此同时,Jam City的工程师优先考虑世界级的技术性能、稳定性、快速响应等,在所有平台上。以下是他们如何应对复杂挑战,将他们的愿景变为现实。

挑战:

提供一个高保真度的3D匹配游戏,能够流畅运行并在各种设备上保持一致的性能

平台:

iOS、Android

地点:

加利福尼亚州卡尔弗城

项目工作人员:

50

迪士尼魔法匹配3D:一个Unity案例研究

一个工作室如何在管理过热、内容交付和其他技术问题等挑战的同时保持性能?

在生产过程中,在单个关卡中渲染数百个带物理效果的3D物体意味着要小心照明、后期处理和多边形计数。

“早期过热是一个主要问题,尤其是在20分钟的会话中——手机会变得非常热,”Jam City的软件工程经理和迪士尼魔法匹配3D的技术负责人Hebby Mathew说。“我们通过提高性能并开发一种方法来持续测量各种硬件的设备热量来解决这个问题。”

另一个挑战是内容交付——异步流式传输资产而不影响帧率。“Unity的可扩展编辑器帮助我们构建高效的工具来管理内容的加载时间和方式,”马修说。

最后,在对低端、中端和高端设备进行游戏性能分析以识别瓶颈时,团队发现了一些关键问题,如过多的碰撞调用和高多边形模型,尤其是在低端GPU上。

“优化这些问题带来了性能提升,并帮助解决了过热问题,”马修说。

迪士尼魔法匹配3D

结果

- 在低端Android设备上将帧率提高了40 fps,在中端设备上提高了35 fps

- 在iOS上减少了40%的绘制调用,在Android设备上减少了45%

- 在iOS上减少了30%的RAM使用,在Android设备上减少了15%

- 将非网络处理负载时间减少了55%

- 将超过10,000个三角形的网格数量从33减少到0

- 将5,000到10,000个三角形的网格数量从324减少到235

- 将光源数量降低了67%

迪士尼魔法匹配3D | Jam City | 迪士尼

游戏初始加载时间的编辑器截图

跟踪帧和系统的性能

当团队遇到性能问题时,他们转向分析工具以获得更深入的见解。

Unity Profiler标记对于跟踪多帧任务特别有帮助,”Jam City的软件工程师凯文·约翰逊说。“我还使用了Profiler Analyzer进行比较。”

另一位工程师安德里亚·拉米雷斯使用二进制日志文件扩展了分析,以捕获特定帧快照。“这让我们能够在不需要实时分析器的情况下分析性能,”她解释说。

迪士尼魔法匹配3D | Jam City | 迪士尼

优化后游戏更快加载时间的编辑器截图

团队进一步定制了分析器,添加了可丢弃项以简化触发和记录。除了 CPU 分析外,他们还使用内存分析器监控内存,并通过帧调试器解决渲染问题。分析器记录器使他们能够在可重复测试期间跟踪全局性能统计。

“引擎最大的优势之一是编辑器的可扩展性,”拉米雷斯补充道。“通过捕获多帧快照和脚本测试,我们收集了一致、可靠的性能数据。”

迪士尼魔法匹配3D | Jam City | 迪士尼

迪士尼魔法匹配3D | Jam City | 迪士尼

减少大幅性能峰值

分析显示在关卡开始时存在主要性能峰值,主要是由于资产首次出现时的着色器编译造成的。使用地址可寻址项,团队识别出触发不必要着色器编译的重复资产。

“我们提前加载了 UI 元素和游戏组件,”开发者约翰·恩尼说。“不当分组的资产包是一个关键问题,导致重复的着色器编译——这是我最初忽视的。”

早期,他们集成了快速大纲以快速添加组件高亮。虽然这引入了一些过度绘制——额外的渲染开销——但优化使他们能够在不进行全面重写的情况下保留它。

音频也对性能峰值产生了影响。“每个游戏组件触发了自己的碰撞声音,”恩尼解释道。“最初这工作得很好,但当 300 个组件同时掉落时,帧时间飙升至 500 毫秒。用单一的环境掉落声音替换这些多个声音将其减少到 20-30 毫秒——而且听起来实际上更好。”

迪士尼魔法匹配3D | Jam City | 迪士尼

在游戏过程中捕获初始大性能峰值的编辑器内捕获

触觉反馈也需要微调。“我们在大规模碰撞期间限制了触觉调用,”技术总监特洛伊·李说。“应用这种约束在整个游戏中持续提高了性能。”

照明带来了另一个挑战。尽管延迟渲染提高了性能,但与艺术目标相冲突。“前向渲染在多个光源下表现不佳,因为它需要每个对象的昂贵通道,”拉米雷斯解释道。为了平衡质量和效率,恩尼开发了一种烘焙照明解决方案,保持了视觉保真度,同时提高了运行时性能。

几何复杂性也是一个问题。“我们最初的模型超过了10,000个三角形,”首席技术艺术家克里斯滕·维克斯说。“我们将大多数模型减少到2,500个三角形以下,以确保在低端设备上良好的性能。”

迪士尼魔法匹配3D | Jam City | 迪士尼

优化后小性能峰值的编辑器内捕获

简化初始化和资产处理

早期,资产加载和涉及网络调用的系统初始化造成了重大问题。为了避免在游戏玩法或用户界面交互期间出现延迟,团队最初一次性加载所有资产。然而,随着游戏功能和资产的扩展,启动时间变得过长。

他们通过将一些资产移到后台异步加载来优化,减少了初始加载时间,同时保持了流畅的游戏体验。他们还使用.NET的任务系统并行化加载任务,这些改进与本地资产包加载相结合带来了显著的收益。

网络延迟,尤其是在初始加载期间,也影响了性能。为了解决这个问题,团队将网络调用从Unity协程切换到C#的async/await,减少了延迟。“我们还通过用代码生成替换Newtonsoft的基于反射的方法来优化JSON反序列化,提高了性能,”约翰逊说。

实例化成本进一步影响了初始加载时间,由于游戏在启动后立即创建许多UI和后台预制件,导致明显的延迟——在中档设备上约为半秒。

迪士尼魔法匹配3D | Jam City | 迪士尼

迪士尼魔法匹配3D | Jam City | 迪士尼

“约翰逊解释说,成本的一大部分是许多对象的重 Awake() 初始化。”“我们通过在创建时禁用对象并仅在需要时启用它们来优化实例化。”我们还推迟或错开实例化,而不是一次性完成,这减少了可见延迟。”

为了更精确地测量性能,团队使用 System.Diagnostics.Stopwatch 来计时实例化间隔,并对代码的各个部分进行了仪器化。

尽管进行了这些优化,现实世界的网络质量仍然影响加载时间。为了解决这个问题,团队正在尝试懒加载——将游戏与所有配置一起发布,并允许玩家立即进入,同时在后台异步更新配置。“早期测试看起来很有希望,但我们在谨慎监控实时结果,”马修说。

迪士尼魔法匹配3D | Jam City | 迪士尼

迪士尼魔法匹配3D | Jam City | 迪士尼

解决低端设备上的 GPU 限制

在性能优化期间,团队注意到一些低端设备的改善微乎其微。他们发现这些设备主要使用 Mali GPU,这些 GPU 难以有效处理游戏的目标物品数量。然而,他们能够在所有设备层中保持 60 fps 的目标。

Weeks 详细说明了这些限制:“较旧的第三代和第四代 Mali GPU 是严格的基于瓦片的渲染器,容易受到几何限制。”相比之下,许多其他 GPU 使用混合渲染技术,帮助避免这个瓶颈。较新的 Mali GPU,如最近 Pixel 手机中的 GPU,拥有更多的处理单元,并且处理几何体的能力更强。”

迪士尼魔法匹配3D | Jam City | 迪士尼

迪士尼魔法匹配3D | Jam City | 迪士尼

为了更好地理解这些限制,马修在开发早期构建了一个工具,该工具在各种设备上实例化越来越多的对象,以跟踪帧率下降。该工具揭示了某些 GPU 的阈值较低,强调了在不牺牲艺术质量的情况下仔细优化游戏模型的必要性。

“在预生产阶段,艺术总监要求大量使用后期处理效果和多个动态光源,”Weeks 说。“然而,由于后期处理对设备过热和性能下降的显著贡献,我们在生产中去除了后期处理。”

Enney 还通过将点光源直接烘焙到着色器中来提高效率,将活动光源的数量从三或四个减少到仅一个。

这种协作方法使团队能够在视觉质量和性能之间找到最佳平衡,确保在各种设备上都能获得流畅的体验。

立即下载 Unity Pro

借助强大的工具、支持、经过验证的合作伙伴和充满活力的社区,开始制作出品质和影响力都比肩乃至赶超大型工作室游戏大作的游戏。