Version: 2019.4
优化
图形方法

移动平台优化实用指南

本指南适用于对移动平台游戏开发不熟悉的开发人员,他们目前正在规划新的移动平台游戏并进行原型构建,或者正在移植现有项目以便在移动设备上顺利运行,但可能对此感到不知所措。此外,制作移动平台游戏或面向旧 PC 和上网本的浏览器游戏的任何人都可以参考本指南。

优化是一个广泛的主题,具体如何做很大程度上取决于具体游戏。因此,最好将本指南作为介绍或参考,而不是保证产品流畅运行的分步指南。

所有移动设备各不相同

本文的信息假设硬件大致处于 Apple A4 芯片组的水平;原装 iPad、iPhone 3GS 和第三代 iPod Touch 上均采用了该芯片组。在 Android 方面,大致相当于 Nexus One 之类的 Android 手机,或大多数运行 Android 2.3 Gingerbread 的手机。这些设备大多数都是在 2010 年初左右发布的。在渴望应用程序的市场中,这些设备是较旧、较慢的一部分,但也应该得到支持,因为它们占据了市场的很大一部分。

非常低端的 Apple 移动设备(例如 iPhone 3G)以及第一代和第二代 iPod Touch 在功能上非常有限,必须更加谨慎进行优化。但是,对于未升级设备的消费者是否会购买应用程序存在一些疑问。因此,除非您制作的是免费应用程序,否则支持旧硬件可能不值得。

市场上有速度极慢和极快的手机,而且移动设备的计算能力正以惊人的速度增长。新一代移动端 GPU 的速度比前一代快五倍的事情并非闻所未闻。与 PC 行业相比,这种速度是非常快的。

优化是设计考虑因素,而不是最后一步

人们经常引用英国计算机科学家 Michael A. Jackson 的程序优化规则:

“程序优化的第一条规则:别这么做。程序优化的第二条规则(仅限专家!):暂时别这么做。”

他的理由是,考虑到计算机目前的速度和速度的增长速度,现在编写的程序很有可能在将来的运行速度会足够快。此外,如果尝试过度优化,可能会让事情变得过于复杂,让自己受到限制,或引入错误。

但是,如果开发的是移动平台游戏,还需要考虑另一个因素:与我们习惯使用的计算机相比,目前市场上的移动平台硬件在功能上非常有限,因此创建一些根本无法在设备上运行的功能的风险可能高于初期优化带来过度复杂化问题的风险。

在本指南中,我们将尝试指出优化会带来巨大好处的情况,而非优化没有太大价值的情况。

优化:不仅仅是程序员的责任

美术师也需要了解平台的局限性以及突破这些局限性的方法,这样才能做出富有创造性的选择,而不必重新制作作品。

  • 如果游戏设计要求将氛围和光照绘制到纹理中而不是进行烘焙,那么美术师可能需要承担更多责任。
  • 无论何时如果能进行烘焙,美术师都可以制作用于烘焙而不是实时渲染的内容。这样可以让他们忽略技术限制并无拘无束完成工作。

设计游戏以获得平稳的运行时状态

以下两个页面详细介绍了游戏性能的一般趋势,并说明如何以最佳方式设计游戏以便进行优化,或在已投产的情况下如何直观确定需要优化的功能。

及早并经常进行性能分析

性能分析非常重要,因为有助于识别哪些优化会带来性能大幅提升,而哪些优化会浪费时间。由于在单独的芯片 (GPU) 上处理渲染的方式,渲染帧所用的时间不是 CPU 所用的时间加上 GPU 所用的时间。实际上,该时间比这两者的时间更长。

这意味着,如果 CPU 降低速度,优化着色器将根本不会提高帧率,如果 GPU 降低速度,优化物理组件和脚本将无济于事。

通常,游戏的不同部分以及不同的情况也表现不同。这意味着,游戏的一部分可能完全因脚本而导致 100 毫秒的帧,而游戏的另一部分也可能会导致同样的减速,但原因是正在进行渲染。至少,如果要优化游戏,必须知道所有瓶颈在哪里。

Unity Profiler

在目标平台为 iOS、Android 或 Tizen 时,可使用 Unity 中的主性能分析器 (Profiler)。请参阅性能分析器文档以了解有关其用法的基本介绍。

内部性能分析器

Android 和 iOS 都有内置的内部性能分析器,每隔 30 帧发出一次文本。此性能分析器可帮助您弄清楚游戏的哪些方面正在减慢速度(例如物理组件、脚本还是渲染),但不提供详细说明(例如,无法指出哪个脚本或渲染器是罪魁祸首)。

  • 如果性能分析器指示在渲染上花费了大部分处理时间,请参阅有关渲染优化的文档
  • 如果性能分析器指示在渲染之外花费了大部分处理时间,请参阅有关脚本优化的文档

请参阅有关内部性能分析器的文档以了解这些性能分析器的工作原理以及如何启用它们。

目录

优化
图形方法
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961