20.帧率问题排查

  1. 20.帧率问题排查
    1. 20.1 题目
    2. 20.2 深入解析
    3. 20.3 答题示例
    4. 20.4 关键词联想

20.帧率问题排查


20.1 题目

假设一个游戏存在帧率不稳定的问题,你如何进行排查和优化?


20.2 深入解析

使用Unity内置性能分析工具定位问题
Unity Profiler 和 Frame Debugger结合使用:

  • Profiler:定位CPU和GPU性能瓶颈、内存问题等
  • Frame Debugger:逐帧检查渲染问题

帧率不稳定的可能原因(从这些可能原因作为出发点去进行优化)

  • CPU负载过高 —— 物理计算过高、逻辑计算过于复杂
  • GPU负载过高 —— DC过多、Shader计算量过大、粒子系统特效、屏幕后处理
  • GC频繁(内存问题)—— 内存压力过大
  • VSync(垂直同步):与显示器刷新对齐,可减轻撕裂;是否开启需结合目标帧率与手感测试,并非卡顿主因的唯一解释,需与 CPU/GPU/GC 数据对照

20.3 答题示例

当帧率不稳定时,我首先会打开 Unity Profiler 结合 Frame Debugger 定位瓶颈:

  1. CPU:检查脚本执行时间、GC 分配、Physics、AI 逻辑等。
  2. GPU:查看 Draw Call、SetPass Calls、Shader 时间、粒子与后处理开销。
  3. 内存/GC:观察每帧的分配量,是否频繁触发垃圾回收。
  4. VSync:确认垂直同步设置是否导致帧率锁定或抖动。

定位后分别采取优化措施:

  • 脚本逻辑:将重计算分帧、缓存重复结果,减少 Update 函数数量。
  • 渲染:合并材质、开启静态/动态批处理、使用 LOD、剔除不可见对象。
  • GC 优化:对象池重用、减少临时分配、使用 struct 或 ArrayPool。
  • VSync:根据项目需求开启或关闭,避免帧率被硬锁。

最后再回到 Profiler 验证帧率是否稳定、各项指标是否达标。


20.4 关键词联想

  • Unity Profiler
  • Frame Debugger
  • CPU vs GPU 瓶颈
  • Draw Call/Batches
  • SetPass Calls
  • GC 分配 & 垃圾回收
  • 对象池 (Object Pool)
  • LOD / Occlusion Culling
  • VSync 设置
  • Update/FixedUpdate 调度
  • 后处理和粒子优化


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏