- 用户指南
- 资源商店 (Asset Store)
- 资源服务器 (Asset Server)(仅限团队许可证)
- 缓存服务器(仅限团队许可证)
- 幕后场景
- 创建游戏
- 运行时实例化预设 (Prefabs)
- 变换 (Transforms)
- 物理
- 添加随机的游戏元素
- 粒子系统(Particle Systems)
- Mecanim 动画系统
- 旧动画系统
- 导航网格 (Navmesh) 和寻路 (Pathfinding)(仅限专业版 (Pro))
- Sound (音频侦听器)
- 游戏界面元素
- 多玩家联网游戏
- iOS 开发入门
- Android 开发入门
- Blackberry 10 开发入门
- Metro:入门指南
- 本地客户端开发入门
- FAQ
- Advanced
- Vector Cookbook
- 资源包(仅限专业版)
- Graphics Features
- 资源数据库 (AssetDatabase)
- 构建播放器管道
- 分析器(仅限专业版)
- 光照贴图快速入门
- 遮挡剔除(仅限专业版)
- 相机使用技巧
- 运行时加载资源
- 通过脚本修改源资源
- 用程序生成网格几何体
- 富文本
- 在 Unity 工程 (Project) 中使用 Mono DLL
- 事件函数的执行顺序
- 移动优化实用指南
- Unity XCode 工程结构
- 优化图形性能
- 减少文件大小
- 理解自动内存管理
- 平台依赖编译
- 泛型函数
- 调试
- 插件(专业版/移动版特有功能)
- 文本场景文件格式(仅限专业版)
- 流媒体资源
- 启动时运行编辑器脚本代码
- 网络模拟
- VisualStudio C 集成
- 分析
- 检查更新
- 安装多版本 Unity
- 故障排除
- Unity 中的阴影
- Unity 中的 IME
- 对集成显卡进行优化
- 网络播放器 (Web Player) 部署
- 使用网络播放器中的信任链系统
使用内置分析器测定性能
Unity iOS 和 Android 都带有内置分析器。它包含在附加元件的所有版本中,而非专业版独有的功能。(但专业版附加元件确实配有更加高级的分析器。)内置分析器从设备上正在运行的游戏中发出控制台消息。这些信息每 30 秒写入一次,让您深入了解提供 游戏运行方式。理解这些信息的含义并非易事,但它们至少可以让您快速确定游戏是 CPU 还是 GPU 绑定,或者如果是 CPU 绑定,那么是 CPU 脚本代码还是降低运行速度的 Mono 垃圾集合。您可以在本页稍后了解如何配置内置的分析器。
分析器能告诉您什么
下面是一个内置分析器输出的实例。
iPhone/iPad Unity internal profiler stats: cpu-player> min: 9.8 max: 24.0 avg: 16.3 cpu-ogles-drv> min: 1.8 max: 8.2 avg: 4.3 cpu-waits-gpu> min: 0.8 max: 1.2 avg: 0.9 cpu-present> min: 1.2 max: 3.9 avg: 1.6 frametime> min: 31.9 max: 37.8 avg: 34.1 draw-call #> min: 4 max: 9 avg: 6 | batched: 10 tris #> min: 3590 max: 4561 avg: 3871 | batched: 3572 verts #> min: 1940 max: 2487 avg: 2104 | batched: 1900 player-detail> physx: 1.2 animation: 1.2 culling: 0.5 skinning: 0.0 batching: 0.2 render: 12.0 fixed-update-count: 1 .. 2 mono-scripts> update: 0.5 fixedUpdate: 0.0 coroutines: 0.0 mono-memory> used heap: 233472 allocated heap: 548864 max number of collections: 1 collection total duration: 5.7
所有时间都是以毫秒/帧为单位。您可以查看最后 30 帧内的最小、最大和平均时间。
General CPU Activity
cpu-player | 显示游戏 Unity 引擎内部执行代码以及在 CPU 执行脚本所花费的时间。 |
cpu-ogles-drv | 显示在 CPU 上执行 OpenGL ES 驱动程序代码所花费的时间。很多因素都可以影响驱动程序统计,如绘制调用的数目、内部渲染状态的数目变化、渲染管线的设置,甚至是处理顶点的数目。 |
cpu-waits-gpu | 显示等待 GPU 完成渲染期间,CPU 的闲置时间。如果这个数字超过 2-3 毫秒,就最有可能说明应用程序是填充率/GPU 处理绑定。如果这个值太小,配置文件将跳过显示此值。 |
msaa-resolve | 应用抗锯齿所需时间。 |
cpu-present | 在 OpenGL ES 中执行 presentRenderbuffer 命令花费的时间量。 |
frametime | 代表游戏帧花费的总时间。请注意,iOS 硬件始终锁定为 60Hz 刷新率,所以您总会得到 ~16.7ms (1000ms/60Hz = ~16.7ms) 的倍数时间。 |
渲染统计
draw-call # | 每帧绘制调用的数量。尽可能保持低值。 |
tris # | 用于渲染的三角形总数。 |
verts # | 用于渲染的顶点总数。如果仅使用静态几何体,建议将这一数值保持在 10000 以下。但如果使用大量蒙皮几何体,则应保持更低的值。 |
batched | 引擎自动批处理的绘制调用、三角形和顶点数量。将这些数字与绘制调用和三角形总数对比,您将了解场景准备批处理的好坏程度。在对象中分享尽可能多的材质,以提高批处理。 |
详细的 Unity 播放器统计信息
播放器详情 (player-detail) 部分提供 引擎内部运行的详细分解:-
physx | 物理花费的时间。 |
animation | 骨骼动画花费的时间。 |
culling | 摄像机视景外剔除对象花费的时间。 |
skinning | 应用动画至蒙皮网格花费的时间。 |
batching | 批处理几何体花费的时间。批处理动态几何体比静态几何体成本要更加昂贵。 |
render | 渲染可见对象花费的时间。 |
fixed-update-count | 此帧中执行的 FixedUpdates 的最小和最大数量。过多的 FixedUpdates 将严重影响性能。此处提供 了一些简单的指引,帮助您设置较好的固定时间增量值。 |
详细的脚本统计信息
mono-scripts 部分提供 了 Mono 运行时执行代码所花费时间的详细分解:
update | 在脚本中执行全部 Update() 函数花费的时间。 |
fixedUpdate | 在脚本中执行全部 FixedUpdate() 函数花费的时间。 |
coroutines | 脚本协同程序内部花费的时间。 |
脚本分配的内存的详细统计信息
mono-memory 部分向您介绍了 Mono 垃圾回收器如何管理内存:
allocated heap | 可供分配的内存总量。如果给定的分配堆中内存不足,将触发垃圾回收。如果在回收之后,内存依然不够,那么分配堆的容量将扩展。 |
used heap | 当前对象用完的分配堆中的部分。每次创建新的类实例(不是结构体),这个数字都将增长,直到下一次垃圾回收。 |
max number of collections | 最后 30 帧垃圾回收通过的数量。 |
collection total duration | 最后 30 帧,所有垃圾回收通过的总时间(毫秒)。 |
配置
iOS
iOS 默认禁用分析器。如需启动,必须打开 Unity 生成的 XCode 工程。选择 iPhone_Profiler.h
文件并将
#define ENABLE_INTERNAL_PROFILER 0
一行更改为
#define ENABLE_INTERNAL_PROFILER 1
在 XCode 菜单栏中选择查看 (View) > 调试区 (Debug Area) > 激活控制台 (Activate Console),显示输出的控制台 (GDB),然后运行您的工程。Unity 将每 30 帧向控制台窗口输出统计信息。
Android
Android 默认启用分析器。只需在构建时勾选播放器设置中的开发构建 (Development Build),启动设备时,统计资料将显示在 logcat 中。如需查看 logcat,您需要 adb
或 Android Debug Bridge。若符合条件,运行 shell 命令adb logcat
即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论