Unity的Frame Debugger

Posted 番茄猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity的Frame Debugger相关的知识,希望对你有一定的参考价值。

Frame Debuger 帧调试器

Frame Debugger可以让我们单独的观察一帧的渲染过程,观察到每一个DrawCall的渲染情况,它会把DrawCall一个一个按顺序列出来,通过点击每一个DrawCall,可以看到执行到该DrawCall时的渲染图,一步一步的点就可以看到整个场景渲染非常详细的构建过程。

基础使用

Window-Analysis-Frame Debugger打开窗口
开启分析后,左侧会显示DrawCall层级列表(包括了其它一些事件,比如Clear事件),右侧的面板会显示更多的信息:该DrawCall渲染的几何物体、使用的Shader等

我们选中不同的位置,可以查看不同的渲染细节
查看不透明物体的渲染

查看阴影贴图的渲染


远程调试


类似Profiler,Frame Debugger也可以进行远程调试
但对应的平台需要支持多线程渲染(WebGL,ios不支持,所以无法使用Frame Debugger),大部分的平台支持,在Building时要注意Development Build要勾选
对于桌面平台还有一点要注意的:要勾上“Run In Backgroud”(后台运行),如果我们是在同一台电脑上使用构建后的程序和Editor,我们需要到Editor上开启分析,但是此时构建的程序处于后台,如果没有运行,则无法进行分析,所以要勾上这个选项

渲染目标(Render Target)显示相关选项

选择不同的渲染目标或者深度图



选择不同的通道

在一些渲染图中,不同的通道对应着不同的数据,比如光滑度、AO等

调整显示的强度等级


像上面的深度图显示太暗了,我们可以调整强度,让它更亮一点,方便观察

查看Shader属性

选择Shader属性分页,我们可以查看到Shader的属性,包括使用的贴图,向量等数据,点击贴图,如果是工程中的素材,可以直接定位。Ctrl+点击可以预览贴图

其它的帧调试技术

其它的一些帧调试工具
Visual Studio graphics debugger: http://msdn.microsoft.com/en-us/library/hh315751.aspx
Intel GPA: https://software.intel.com/en-us/vcsource/tools/intel-gpa
RenderDoc: https://software.intel.com/en-us/vcsource/tools/intel-gpa
NVIDIA NSight: http://www.nvidia.com/object/nsight.html
AMD GPU PerfStudio: https://gpuopen.com/archive/gpu-perfstudio/
Xcode GPU Frame Capture: https://developer.apple.com/library/ios/recipes/xcode_help-debugger/articles/debugging_opengl_es_frame.html
GPU Driver Instruments: https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/Instrument-GPUDriver.html

参考

https://docs.unity3d.com/2018.4/Documentation/Manual/FrameDebugger.html

测试版本

Unity 2018.4

VS Code里使用Debugger for Unity插件进行调试(2023最新版)

问题

换了台开发机,重新安装了下开发环境。突然发现Visual Studio Code无法用来调试Unity了。

明明流程都是按照Unity官方教程2023.1进行的,可在创建Launch.json文件时,死活出不来Unity Debugger选项。

说明:Debugger for Unity是一个非正式支持的,官方推荐的,应用最广的,Visual Studio Code上的Unity调试插件。如果还没有配置Unity Debugger可以直接看官方文档 | Debugger for Unity - Visual Studio Marketplace进行配置。本文视作在官方文档上的补充,解决按照官方文档操作却无法添加调试器的问题。

原本预期的步骤是:

结果出现的步骤是:

环境

  • Unity Version: 2021.3.16f1

  • VS Code Version: 1.74.2

  • Version of the Debugger for Unity: 3.0.2

  • Version of C#:v1.25.1(如果你的版本也是v1.21.13+,那你很可能是遇到和我一样的问题了)

问题定位

点开Visual Studio Code插件仓库,打开Debugger for Unity,看到这个插件上次更新已经是2020年的事情了,而且界面上明确写着:此扩展已启用,因为不在对其进行维护。

再点开插件的github地址,在Issues里遇到了一堆的受害者。


这个仓库弃用了吗?距离上次更新都十个月了,这个插件最新版的unity还能用吗?


不能发个官方的声明吗说明一下这个插件的情况吗?他都坏掉了……


现在都2022年底了,还是没看到官方通知。官方Unity文档里仍然说它被推荐。


团队的回答也很直接:

简单来说,我们很忙,没钱没人来维护这个项目。我们建议你换个IDE(不要用VS Code了),比如用Visual Studio Community。或者JetBrains Rider也行。

好吧,这个就是官方的态度,不要用了。


即使2023年他们仍把Visual Studio Code和这个插件放在最新文档里,但是正如文档里所说,这个Debugger for Unity拓展插件并没有被正式支持(Not Ffficially supported by Unity)。

说的还是太委婉了,直接点说:这个拓展插件我们不维护了,爱用不用。

甭管别的博客里有多推荐,不推荐了就是官方的态度。

解决方案

要么就听官方爸爸的,开发的时候用Visual Studio Code,调试的时候用Visual Studio得了……

要么我就想凑合用能不能行?

能!

如何在新的Visual Studio Code+Unity环境里使用Debugger for Unity进行调试

之所以你创建不了Unity Debugger,是因为C#插件在v1.21.13后,把标识符从ms-vscode改成了ms-dotnettools了,Unity Debugger又没有更新,所以找不到。

两个方案:

方案1.降级(不推荐)

找到c#插件,通过手动安装C# v1.21.12.vsix 或 自动降级的方式把C#版本回退到1.21.13以前

方案2.躲bug生成Launch.json(推荐)

说来说去,只是因为C#插件升级后,Debugger for Unity识别不到C#文件导致无法生成调试的配置文件罢了。那么我们不在C#文件中去生成不就好了?

No environment to choose · Issue #202 · Unity-Technologies/vscode-unity-debug (github.com)

  1. 随便创建一个txt文件,如:test.txt

  1. 点击这个text.txt文件后,进入调试页签,如图:

  1. 点击小齿轮就可以看到Unity Debugger啦,点击它后就生成了能用的Launch.json,如图:

方案3.手动配置Launch.json

  1. 先随便生成一个Launch.json(如果已经有了,跳过这一步)

  1. 再替换这个json的内容(或者手动合并json)

launch.json


    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
            "name": "Unity Editor",
            "type": "unity",
            "path": "/d:/workspace/unity/learn/CSharpLearn/Library/EditorInstance.json",
            "request": "launch"
        ,
        
            "name": "Windows Player",
            "type": "unity",
            "request": "launch"
        ,
        
            "name": "OSX Player",
            "type": "unity",
            "request": "launch"
        ,
        
            "name": "Linux Player",
            "type": "unity",
            "request": "launch"
        ,
        
            "name": "iOS Player",
            "type": "unity",
            "request": "launch"
        ,
        
            "name": "Android Player",
            "type": "unity",
            "request": "launch"
        ,
        
            "name": "Xbox One Player",
            "type": "unity",
            "request": "launch"
        ,
        
            "name": "PS4 Player",
            "type": "unity",
            "request": "launch"
        ,
        
            "name": "SwitchPlayer",
            "type": "unity",
            "request": "launch"
        
    ]

大功告成,终于又可以用Visual Studio Code调试啦!

参考

No environment to choose · Issue #202 · Unity-Technologies/vscode-unity-debug (github.com)

Unity - 手动:集成开发环境 (IDE) 支持 (unity3d.com)

Debugger for Unity - Visual Studio Marketplace

以上是关于Unity的Frame Debugger的主要内容,如果未能解决你的问题,请参考以下文章

unity, OnTriggerStay/OnTriggerStay2D not called every fixedUpdate frame

unity检查函数是否在一帧中执行

a-frame学习笔记—实体添加click事件

关于Unity中的帧动画

小白虚心求教如何用unity播放rtsp流媒体

单元测试和实现之间的重复代码