版本:Unity 6 (6000.0)
语言:英语
适用于 Android 的优化
优化应用程序启动时间

Android 线程配置

Unity 根据设备的 CPU 拓扑结构配置了线程关联性线程优先级。Unity 的默认线程配置适用于大多数项目,但在某些情况下,您可能需要修改线程配置(例如,当您需要针对特定设备优化或者当您的应用程序追求低功耗且不需要高帧速率时)。

重要信息:尽可能使用 Unity 的默认设置。如果您修改线程配置以优化针对特定设备,则您所做的任何更改可能会对其他设备或甚至在未来操作系统版本中相同的设备造成负面性能影响。

线程关联性

线程关联性控制线程应在哪个 CPU 核心上运行。对于 Android 设备,核心通常可划分为两类:

  • 大:功能强大的核心,电池耗能大。
  • 小:较慢的核心,电池耗能低于大核心。

重要信息:针对各种 Android 设备的典型应用程序,不要将线程绑定到特定核心。

识别 CPU 核心

Unity 通常从设备的操作系统接收每个 CPU 核心的容量和小/大分配。对于较旧的操作系统版本,此信息并不总是可用。在这种情况下,Unity 计算 CPU 核心容量并利用该信息将每个核心指定为大核心或小核心。为指定核心,Unity 将每个核心的 CPU 容量与阈值进行比较。默认情况下,如果核心的 CPU 容量至少是速度最慢核心的两倍,则该核心为大核心;否则为小核心。

如果您想进一步控制 Unity 指定为大或小核心的核心,则可以提供自定义阈值。为提供自定义阈值,请使用命令行参数 -platform-android-cpucapacity-threshold [value],其中值的范围为 0 到 1024,0 表示容量最低的核心,1024 表示容量最高的核心。例如,值为 870(大约是 1024 的 85%),这意味着如果核心的 CPU 容量位于芯片上核心的前 15%,则该核心为大核心。有关如何在 Android 设备上向 Unity 添加启动命令行参数的信息,请参阅从自定义 UnityPlayerActivity 文件指定 Unity 启动参数

注意:Unity 始终将核心归类为大核心或小核心。对于某些复杂的 CPU 拓扑结构(例如,那些具有中等核心的拓扑结构),Unity 仍将核心归类为大核心或小核心。

线程关联别名

Unity 提供了以下别名,可用作线程关联值

  • any:允许线程在任何内核上运行。
  • little:允许线程在任何 Little 核心上运行。
  • big:允许线程在任何 Big 核心上运行。

您还可以使用十六进制和二进制值来指定线程关联。在二进制中,位索引引用特定的 CPU 核心。通常情况下,Little 核心从索引 0 开始,然后紧跟 Big 核心。

例如,如果 CPU 包含 4 个 Little 核心和 4 个 Big 核心

  • 二进制值 0b11110000 和十六进制值 0xf0 允许线程在 Big 核心上运行。
  • 二进制值 0b1111 和十六进制值 0xf 允许线程在 Little 核心上运行。

线程优先级

线程优先级控制设备操作系统如何向线程分配 CPU 时间。操作系统向优先级更高的线程分配更多 CPU 时间,优先级较低的线程则相对较少。

您可以在 Unity 中使用的线程优先级值在 -20 至 19 的范围内,其中 -20 为最高优先级,19 为最低优先级。

可配置的 Unity 线程

本部分包含以下方面的信息:您可以配置的 Unity 线程,以及用于配置这些线程的命令行参数。

有关如何向 Android 设备中的 Unity 添加启动命令行参数的信息,请参阅从自定义 UnityPlayerActivity 文件指定 Unity 启动参数

重要提示:在某些设备和 Android 操作系统版本上,Android 操作系统可能会忽略命令行参数并引发错误。如果发生这种情况,您的应用程序仍会正常运行而不会出现任何问题,但 Android 不会应用您指定的线程关联或线程优先级设置。

Unity 主线程

Unity 的主线程执行所有 脚本允许您创建自己的组件、触发游戏事件、随着时间推移修改组件属性以及以任意方式响应用户输入的代码 片段。更多信息
请在 术语表 中查看
,并且通常具有较高的 CPU 负载。影响此线程的命令行参数是

  • -platform-android-unitymain-priority [value] 其中 [value] 是线程的 优先级
  • -platform-android-unitymain-affinity [value] 其中 [value] 是线程的 关联

Unity JobWorker 线程

Unity 的工作线程执行来自这两个核心的作业:核心引擎和应用程序通过 C# 作业系统 调度的作业。影响这些线程的命令行参数是

  • -platform-android-jobworker-priority [value] 其中 [value] 是线程的 优先级
  • -platform-android-jobworker-affinity [值] [值1 值2 值3] 其中 [值]预关联 的线程,[值1 值2 值3] 是您可以用来指定每个线程的工作线程预关联的可选值。如果您只设置一个值,Unity 会对所有工作线程使用相同的值。您可以使用“-job-worker-count”来指定工作线程的数量。

Unity 渲染线程

如果您的项目使用了 多线程渲染,Unity 的渲染线程就会与图形 API 交互。

  • -platform-android-gfxdeviceworker-priority [值] 其中 [值]优先级 的线程。
  • -platform-android-gfxdeviceworker-affinity [值] 其中 [值]预关联 的线程。

注意:如果您使用了 GraphicsJobs,那么 JobWorker 线程也会与图形 API 交互。

适用于 Android 的优化
优化应用程序启动时间