2.Unity Profiler


1. CPU

    1. 渲染图形
    1. 脚本执行
    1. 物理
    1. 动画
    1. 垃圾回收
    1. 光照
    1. UI
    1. 垂直同步VSync
    1. 其他

2. Memory

    1. Scene Memory,场景对象组件。
    1. Assets 资源
    1. Builtin Resources 内置资源
    1. Not Saved 标记为DontSave的对象(该对象不保存到场景。加载新场景时,也不会销毁它。它是 HideFlags.DontSaveInBuild | HideFlags.DontSaveInEditor | HideFlags.DontUnloadUnusedAsset 的快捷方式)
    1. 其他

3. Rendering

    1. Draw Calls Count, Unity 在一帧内发出的绘制调用总数。Unity 在将游戏对象渲染到屏幕时发出绘制调用。这个数字包括非批量绘制调用以及动态和静态批量绘制调用。
    1. SetPass Calls Count, Unity 在一帧中切换用于渲染游戏对象的着色器通道的次数。一个着色器可能包含多个着色器通道,每个通道以不同的方式渲染场景中的游戏对象。
    1. Total Batches Count。 Unity 在一帧内处理的批次总数。这个数字包括静态和动态批次。
    1. Triangles Count。Unity 在一帧内处理的三角形数。
    1. Vertices Count Unity 在帧期间处理的顶点数。
    1. Dynamic Batching、Static Batching、Instancing
    1. Used Textures Count。 Unity 在帧期间使用的纹理数
    1. Used Textures Bytes。 纹理使用的内存量。
    1. Render Textures Count。 Unity 在帧期间使用的 RenderTextures 数
    1. Render Textures Changes Count。 Unity 在帧期间将一个或多个 RenderTextures 设置为渲染目标的次数。
    1. Used Buffers Count。 所使用的 GPU 缓冲区和内存的总数。这包括顶点、索引和计算缓冲区以及渲染所需的所有内部缓冲区。
    1. Used Buffers Bytes。 RenderTextures 使用的内存量。
    1. Vertex Buffer Upload In Frame Count。 CPU 在帧中上传到 GPU 的几何体数量。这代表顶点/法线/ texcoord 数据。GPU 上可能已经有一些几何体。此统计信息仅包括 Unity 在帧中传输的几何体。
    1. Index Buffer Upload In Frame Count。 PU 在帧中上传到 GPU 的几何体数量。这表示三角形索引数据。GPU 上可能已经有一些几何体。此统计信息仅包括 Unity 在帧中传输的几何体。
    1. Index Buffer Upload In Frame Bytes。
    1. Shadow Casters Count。 在一帧中投射阴影的游戏对象的数量。如果一个游戏对象投射多个阴影(因为多个光源照亮它),该对象投射的每个阴影都有一个条目。

4. UI

    1. Layout。 布局消耗, 布局组件重点。
    1. Render。 UI 在完成渲染部分中花费的时间。
    1. Batches。 显示一起批处理的绘制调用的总数。
    1. Rebuild。 顶点重建。
    1. Vertices。用于渲染 UI 某个部分的顶点总数。

常见原因: 1. 不与画布共面 (Not Coplanar With Canvas):批处理需要对象的矩形变换与画布共面(未旋转)。 2. 画布注入索引 (CanvasInjectionIndex):CanvasGroup 组件存在并强制新建批次,例如在其余部分上显示一个组合框的下拉列表时。 3. 不同的材质实例、矩形裁剪、纹理、A8 纹理用法 (Different Material Instance, Rect clipping, Texture, or A8TextureUsage):Unity 只能将具有相同材质、遮罩、纹理和纹理 Alpha 通道用法的对象一起进行处理。

5. Global Illumination

    1. Total CPU。消耗的时间。

6. 物理

    1. Physics.Processing 或 Physics.Simulate。 消耗时间、调用次数
    1. 物理组件统计。

7. 可用代码

    1. CustomSampler. 使用 CustomSampler 测量脚本代码块的执行时间。生成的信息将显示在 CPU 性能分析器中,并且可以通过 Recorder 捕获。 使用 CustomSampler 来分析代码比使用 Profiler.BeginSample 更高效。这是因为与 Profiler.BeginSample 相比,预先创建的 CustomSamplers 具有非常低的 Begin 调用开销。
    1. Profiler
    1. Recorder
    1. Sampler
    // debug 模式
    EditorUserBuildSettings.development = true;

    //下面为 Unity Profiler 调试选项
    EditorUserBuildSettings.connectProfiler = true;
    EditorUserBuildSettings.buildWithDeepProfilingSupport = true;

    
    // deep 模式支持
    EditorUserBuildSettings.buildWithDeepProfilingSupport = true;
using UnityEngine;
using UnityEngine.Profiling;

public class ProfilerAPITest : MonoBehaviour
{
    CustomSampler sampler;
    Recorder behaviourUpdateRecorder;
    void Start()
    {
        sampler = CustomSampler.Create("ProfilerAPITest");
        behaviourUpdateRecorder = Recorder.Get("BehaviourUpdate");
        behaviourUpdateRecorder.enabled = true;
    }

    void Update()
    {
        sampler.Begin();
        {
            GameObject[] gos = new GameObject[10];
            for (int i = 0; i < gos.Length; i++)
            {
                gos[i] = GameObject.CreatePrimitive(PrimitiveType.Cube);
            }

            for (int i = 0; i < gos.Length; i++)
            {
                GameObject.Destroy(gos[i]);
            }
        }
        sampler.End();

        if (behaviourUpdateRecorder.isValid)
        {
            Debug.Log($"BehaviourUpdate time { behaviourUpdateRecorder.elapsedNanoseconds}");
        }
    }
}

https://docs.unity3d.com/cn/2022.1/Manual/ProfilerWindow.html


文章作者: lyg
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lyg !
  目录