封面来自霍格沃茨之遗
前不久我的Windows开发机炸了,手上只有一台公司配发的MacBook M1 Pro
习惯在Windows下用RenderDoc调试的我,突然就懵逼了
首先拒绝UnityEditor自带的FrameDebugger,这货在抓URP相关的Event经常会抓不到指定的Tick表现为层级试图闪烁,在暂停编辑器的情况下只能相对改善,无法解决。
接着打开RenderDoc主页没有MacOS的版本下载
脑中闪过自己拿源码编译一个Mac版本,但是似乎RenderDoc不支持Metal截取,直接放弃
那么就剩下2个方案
1.编写NativePlugin,嵌入MTLCaptureManager相关代码
2.UnityEditor发布项目到XCode工程,在XCode Debug工程时FrameCapture
但是这2种方案都非常繁琐,是否有直接在编辑器上截取调试的方法呢。
摸索了一番,发现有的,但是有坑!!!
官方文档
Xcode frame debugger Unity integration
翻译过来
1.创建一个空工程
2.Scheme 打开Info标签
3.设置可执行文件为UnityEditor
4.根据文档开启FrameCapture
5.设置启动参数,如果有UnityHub需要特别设置
我们照着做一遍
1.打开XCode创建一个XCodeProject
选择创建一个 MacOS Command Line Tool
产品名称随便取一个,语言选择C++
之后选择工程保存路径,之后就打开工程
2.略
从第3步开始就是坑了
如果你是M1 芯片的Mac 那么一定不要下载SILICON的版本,一定要下载Intel的版本
M1 配合SILICON版本的编辑器虽然可以提升性能,省电。 但是无法触发截帧!!!!!
第4步也有坑
GPU FrameCapture的选项不要选择Automatically,直接选Metal
第5步的坑估计只有国内版用户才会踩
国内用户启动编辑器必须通过UnityHub启动,文档说Executable设置为 UnityHub.app
实际测试 UnityHub.app 加上 启动参数 projectPath 是无法拉起项目的。而应该直接设置为UnityEditor.app
最后设置下项目启动路径
点击Xcode启动项目,XCode会自动拉起Unity
同时在Game视窗出现了我们期待已久的“相机”图标
勇敢的点下去!
点击之后,UnityEditor会进入冻结状态,回到XCode会看到FrameCapture已经截取了一帧了
接下来我们试试XCode的修改ShaderCode代码功能
1.先找到绘制Cube的DrawCall
2.找到这个DrawCall用到的Fragment Function双击打开
在Shader中加入一行测试代码 让输出颜色仅仅输出r通道
然后点击“箭头“指向的刷新按钮,可以看到右上角的Cube立刻变成红色了!
调试完成,我们需要点击编辑器的“继续”按钮让UnityEditor解除冻结状态
大功告成
XCode的分析功能比RenderDoc要强大很多,包括各个Draw的功耗带宽耗时指令等等,非常全面。