游戏优化的一部分,我觉得是减少游戏中任何可能出现的卡顿。通过对我的游戏的帧数据进行研究和分析,我发现我每帧都在生成和清除很多不必要的实例。因此,我在Unity文档中进行了研究,和Claude一起开发了一个脚本和工具,然后经过几轮迭代,最终在我的中等级别设置(4K,最大图形,60fps,低1%)上实现了目标。有一个启动提示在底部,如果你需要的话。
Unity文档:减少频繁的托管分配“理想情况下,每帧0字节,或尽可能接近零。”(Unity手册:垃圾收集器概述)
一些数字(站点,头部,2000帧):
- 每帧垃圾收集的改进:约2.5 KB → 约0.06 KB(约97%减少)。
Unity的例子:每帧1KB = 60KB/s。我们是约4KB/s。
雷达屏幕绘制器:约0.6毫秒每帧,3.4毫秒的峰值 → 约0.06毫秒
工具: - 一个无头的配置文件运行:在批处理模式下播放游戏并记录捕获
- 一个捕获分析器,读取
.raw文件而不打开Profiler窗口:最慢的帧及其热路径,自己的时间每个标记,垃圾每帧由谁产生 - 一个“深度”模式,命名每个分配背后的具体方法
- GPU渲染诊断和图形侧的质量等级扫描
- 一个守卫测试,如果稳定的播放开始分配再次失败
启动提示如果你想自己构建:
写一个Unity编辑器脚本,加载Profiler
.raw捕获文件在批处理模式下(ProfilerDriver.LoadProfile + GetRawFrameDataView),并打印15个最慢的帧和每帧的顶级托管分配,按标记分组。然后添加一个PlayMode测试,播放我的主场景20秒,同时记录到.raw,这样我就可以在不打开编辑器的情况下进行-profile。
评论 (0)