本指南适用于对移动平台游戏开发不熟悉的开发人员,他们目前正在规划新的移动平台游戏并进行原型构建,或者正在移植现有项目以便在移动设备上顺利运行,但可能对此感到不知所措。此外,制作移动平台游戏或面向旧 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 毫秒的帧,而游戏的另一部分也可能会导致同样的减速,但原因是正在进行渲染。至少,如果要优化游戏,必须知道所有瓶颈在哪里。
在目标平台为 iOS、Android 或 Tizen 时,可使用 Unity 中的主性能分析器 (Profiler)。请参阅性能分析器文档以了解有关其用法的基本介绍。
Android 和 iOS 都有内置的内部性能分析器,每隔 30 帧发出一次文本。此性能分析器可帮助您弄清楚游戏的哪些方面正在减慢速度(例如物理组件、脚本还是渲染),但不提供详细说明(例如,无法指出哪个脚本或渲染器是罪魁祸首)。
请参阅有关内部性能分析器的文档以了解这些性能分析器的工作原理以及如何启用它们。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.