Add Zhihu: 如何正确高效的查找游戏「卡顿」原因? - 知乎

This commit is contained in:
Zane
2026-06-10 22:49:47 +08:00
parent 23d6415951
commit bc400c3224

View File

@@ -2,10 +2,57 @@
title: "如何正确高效的查找游戏「卡顿」原因? - 知乎" title: "如何正确高效的查找游戏「卡顿」原因? - 知乎"
source: "知乎" source: "知乎"
url: "https://www.zhihu.com/question/28824284/answer/1965456096262096583" url: "https://www.zhihu.com/question/28824284/answer/1965456096262096583"
date: 2026-06-10 22:46 date: 2026-06-10 22:49
tags: [zhihu, saved] tags: [zhihu, saved]
--- ---
关注
推荐
热榜
专栏
圈子
New
付费咨询
故事
直答
切换模式
登录/注册
如何正确高效的查找游戏「卡顿」原因?
关注问题
写回答
登录/注册
游戏
程序员
编程
Unity游戏引擎
如何正确高效的查找游戏「卡顿」原因?
背景:我在一家创业公司,我们开发了一些独立的小游戏。最近在做的一款小游戏,使用了 Unity 引擎,在研发快要完成时,我们忽然发现:游戏偶尔会卡一下,…显示全部
关注者
206
被浏览
37,144
关注问题​
写回答
邀请回答
好问题 1
1 条评论
分享
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏
登录
查看全部 12 个回答
知秋
游戏性能优化
关注
专栏文章汇总,持续更新: 专栏文章汇总,持续更新:
高通 Adreno GPU 最佳实践 0--汇总 - 知乎 高通 Adreno GPU 最佳实践 0--汇总 - 知乎
@@ -114,3 +161,182 @@ tags: [zhihu, saved]
尽管许多应用的目标是“尽可能达到显示硬件的最大刷新速度”,但即便应用受垂直同步限制,仍存在优化空间,且优化收益不仅限于提升帧率。 尽管许多应用的目标是“尽可能达到显示硬件的最大刷新速度”,但即便应用受垂直同步限制,仍存在优化空间,且优化收益不仅限于提升帧率。
移动应用的多数性能问题最终都与“功耗/电池续航”相关。即便应用通过“受垂直同步限制”而非受CPU或GPU限制达到了目标帧率仍建议优化代码若能通过修改代码降低功耗、减少设备发热应用可在“完成更少工作”的同时维持目标帧率还可能在低端设备上实现更优性能。 移动应用的多数性能问题最终都与“功耗/电池续航”相关。即便应用通过“受垂直同步限制”而非受CPU或GPU限制达到了目标帧率仍建议优化代码若能通过修改代码降低功耗、减少设备发热应用可在“完成更少工作”的同时维持目标帧率还可能在低端设备上实现更优性能。
阅读全文​
赞同 72
添加评论
314
7
分享
豆包让小白也能玩转 AI 漫画图片生成
豆包让小白也能玩转 AI 漫画图片生成
查看详情
豆包
的广告
更多回答
王耀威
投资合作做游戏找我
关注
首先打开profiler,查看所有凸起的线
一般游戏内卡顿的地方
游戏战斗过程中在加载资源文件
NGUI中图集太乱导致drawcall彪涨
NGUI中active/unactive导致重建drawcall生成大量的资源
频繁创建对象删除对象,没有缓存。
unity自身的一些bug,有时候可以看到物理引擎计算的量很大。
使用了更精确但更耗时的判断如meshcollider
所有逻辑都使用unity主线程处理
使用过多复杂的渲染如一些实时GI或摄像机渲染效果加强
string串接foreach,getcomponet等问题
解决方法
在游戏战斗开始时前加载所有用到的资源不要在战斗过程加载资源因为unity是单线程的模式如果没有使用异步线程做加载或一开始进入场景时加载这个问题就很突出了。
NGUI为了减少GPU状态切换的消耗比如切换material把相同material的UIWidget合并减少Draw Call的数量。这一步是基于UIPanel做的合并UIWidget的代码可自行查看UIPanel.cs的FillAllDrawCalls()函数,原理如下图,尽量分好层次如背景框,按钮等。
NGUI中active/unactive会删除重建材质drawcall,如果界面内容稍多一些会导致内存分配甚至出现drawcall的死循环目前比较正确的做法是设置在屏幕坐标外部然后关闭所有NGUI脚本的运行NGUI作者的回复截图。
使用对象池缓存一部分频繁使用的资源,不必每次都创建卸载。
更新新版本,设置好物理引擎参数。
如果没有必要的话尽量使用速度较快的碰撞检测入boxcollider。
应该合理分离主线程与逻辑线程的关系比如一些算法采用异步执行的方式网络数据的解析加载等使用代理来把必要的逻辑切换到主线程不必要的逻辑使用逻辑线程可以通过一个MonoBehaviour的update来执行代理逻辑
有些手机根本无法运行复杂的渲染,能简单尽量简单。
字符串串接使用stringbuilder不使用+频繁foreach最好用for代替缓存已经取到的componet.
阅读全文​
赞同 30
6 条评论
59
11
分享
知乎用户
分享一点我们自己在做性能优化时的小经验:
在Unity Editor模式下运行有部分Overhead是由运行时的场景编辑器导致的采样的时候可以先把“Scene”关掉。
用Profiler采样时首先重点关注CPU占用率高的方法并且优先打击
关注内存分配“GC Alloc”每帧超过100B的内存分配都需要解决否则这样的的内存分配累积后就会引起GC很容易引起卡顿
发布于2015-03-18 11:59
赞同 11
9 条评论
19
3
分享
查看全部 12 个回答
下载知乎客户端
与世界分享知识、经验和见解
广告
关于作者
知秋
游戏性能优化
回答
21
文章
33
关注者
243
关注他
发私信
大家都在搜
换一换
清北鹅腿阿姨被曝卖鸭腿
419 万
2026 高考数学
350 万
我国灵活就业人数超 3 亿
345 万
黄仁勋自嘲亚洲家庭关系
343 万
香港火灾落案起诉七人及两家公司
336 万
重回高考那年还能做对几道
329 万
膳魔师致 3 人失明
315 万
钉钉副总裁发表长文《置身钉外》
315 万
运城多人被臭味熏醒
299 万
张桂梅第16次送考
294 万
广告
 
帮助中心
服务热线400-919-0001
帮助与客服
联系我们
更多
 
举报中心
违法和不良信息举报010-82716601
我的举报
更多
 
关于知乎
知乎个人信息保护指引
知乎协议
下载知乎
Investor Relations
网站资质信息
更多
京ICP证110745号 · 京ICP备13052560号-1 · 京公网安备 11010802020088 号 · 京网文[2025]0422-132 号 · 药品医疗器械网络信息服务备案网药械信息备字2022第00334号
登录知乎,问答干货一键收藏
打开知乎App
在「我的页」右上角打开扫一扫
其他扫码方式:微信
下载知乎App
无障碍模式
验证码登录密码登录
开通机构号
中国 +86
 
获取短信验证码
获取语音验证码
登录/注册
其他方式登录
未注册手机验证后自动登录,注册即代表同意《知乎协议》《隐私保护指引》
扫码下载知乎 App
关闭二维码
登录即可查看 超5亿 专业优质内容
超 5 千万创作者的优质提问、专业回答、深度文章和精彩视频尽在知乎。
立即登录/注册