来自书籍《Unity游戏优化》一共分为9章。
第一章 探索UnityProfiler
1、如何使用UnityProfiler收集分析数据?
2、如何分析Profiler数据找到性能瓶颈?
打开性能分析面板Profiler快捷键Ctrl+7
Profiler窗口分四个部分
Profiler控件
时间轴视图
Frame Counter显示已经分析了多少帧以及在当前时间轴视图中选中了哪一帧。
右边是分析数据的图形化展示,左边是一系列用于启用/禁用不同行为/数据类型的复选框。
CPU使用区域
三种模式:
Hierarchy模式 :Hierarchy模式有助于作为第一步,来决定执行哪个函数调用会花费最多的CPU时间。
Raw Hierarchy模式 :如果尝试统计某个全局方法调用了多少次,或者确认这些调用中的某次调用比预计消耗了更多的GPU和内存,Raw Hierarchy模式会很有用。
Timeline模式:对于CPU使用情况区域最有用的模式可能是Timeline选项
Timeline模式将细分视图垂直组织到不同的部分,代表运行时的不同线程,例如主线程、渲染线程和各种后台工作线程,称为Unity Job System,用于加载诸如场景和其他资源等活动。水平轴表示时间,所以宽方块消耗的CPU时间比窄方块更多,方块的水平大小也表示相对时间,更容易比较两个调用所消耗的时间。垂直轴代表调用栈,因此更深的链表示在那个栈上有更多调用。
GPU使用情况区域
“GPU使用情况”区域和“CPU使用情况”区域类似,但前者展示的是发生在GPU上的方法调用和处理时间。这个区域中的相关Unity方法调用与摄像机、绘制、不透明的和透明的几何图形、光照和阴影等有关。
细分视图提供了有用的信息,诸如SetPass调用的数量(也称为Draw Call)、渲染到场景的批次总数、通过动态批处理和静态批处理节省的批次数量和它们的生成方式,以及纹理的内存消耗。
有两种模式
Simple模式
Simple模式只提供子系统内存消耗的高层次概览。包括Unity底层引擎、Mono框架(由垃圾回收管理的整个堆的大小)、图形资源、音频资源、缓冲区,甚至用于保存Profiler收集的数据的内存。
Detailed模式
Detailed模式显示每个GameObjects和MonoBehaviours为其Native和Managed表示所消耗的内存。它还有一列,解释为什么对象可能消耗内存以及它可能何时被销毁。
注意,单击Take Sample: < TargetName >按钮,信息仅在Detailed模式下通过手动采样来显示。
音频区域
可以用于估量音频系统的CPU消耗,以及(所有播放中或暂停的)音源和音频剪辑的总内存消耗。
Physics和Physics 2D区域
有两个不同的“物理”区域,一个是“3D物理”(Nvidia的PhysX),另一个是“2D物理”系统(Box2D)。这个区域提供不同的物理统计数据,例如Rigidbody、Collider和Contact计数。
网络消息和网络操作区域
视频区域
UI和UI详情区域
全局光照区域
Global Illumination(GI简称)
细分视图控件栏
细分视图
验证脚本是否出现过
为了快速验证脚本是否存在,可以在Hierarchy窗口的文本框中输入以下内容:t:<monobehaviour name> name为脚本名 还要注意脚本所在物体是否激活
处理后期初始化的一个更好的地方是MonoBehaviour组件的Start()回调,它总是在每个对象的Awake()之后,第一个Update()之前调用。后期更新也可以在LateUpdate()回调中完成。
大多数游戏希望以30FPS或60FPS的速度运行,这意味着它们分别只有33毫秒或16毫秒来计算整个帧的所有内容。因此,假设只需要将特定代码块的运行时间降低到10毫秒以下,那么为了获得微秒精度而重复数千次测试就太不值得了。
string.Format()。简短的解释是,使用此方法是因为使用+操作符(例如,Debug.Log("Test: " + output);等代码)生成自定义string对象会导致惊人的内存分配量,令系统进行垃圾回收。