From bc400c3224add7416e7fc75da1a7ee327288e6e2 Mon Sep 17 00:00:00 2001 From: Zane Date: Wed, 10 Jun 2026 22:49:47 +0800 Subject: [PATCH] =?UTF-8?q?Add=20Zhihu:=20=E5=A6=82=E4=BD=95=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E9=AB=98=E6=95=88=E7=9A=84=E6=9F=A5=E6=89=BE=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E3=80=8C=E5=8D=A1=E9=A1=BF=E3=80=8D=E5=8E=9F=E5=9B=A0?= =?UTF-8?q?=EF=BC=9F=20-=20=E7=9F=A5=E4=B9=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...何正确高效的查找游戏_卡顿_原因__-_知乎.md | 228 +++++++++++++++++- 1 file changed, 227 insertions(+), 1 deletion(-) diff --git a/InBox/如何正确高效的查找游戏_卡顿_原因__-_知乎.md b/InBox/如何正确高效的查找游戏_卡顿_原因__-_知乎.md index 26f2998..c720633 100644 --- a/InBox/如何正确高效的查找游戏_卡顿_原因__-_知乎.md +++ b/InBox/如何正确高效的查找游戏_卡顿_原因__-_知乎.md @@ -2,10 +2,57 @@ title: "如何正确高效的查找游戏「卡顿」原因? - 知乎" source: "知乎" url: "https://www.zhihu.com/question/28824284/answer/1965456096262096583" -date: 2026-06-10 22:46 +date: 2026-06-10 22:49 tags: [zhihu, saved] --- +关注 +推荐 +热榜 +专栏 +圈子 +New +付费咨询 +故事 +​ +直答 +切换模式 +登录/注册 +如何正确高效的查找游戏「卡顿」原因? +关注问题 +​ +写回答 +登录/注册 +游戏 +程序员 +编程 +Unity(游戏引擎) +如何正确高效的查找游戏「卡顿」原因? +背景:我在一家创业公司,我们开发了一些独立的小游戏。最近在做的一款小游戏,使用了 Unity 引擎,在研发快要完成时,我们忽然发现:游戏偶尔会卡一下,…显示全部 ​ +关注者 +206 +被浏览 +37,144 +关注问题​ +写回答 +​ +邀请回答 +​ +好问题 1 +​ +1 条评论 +​ +分享 +​ +登录后你可以 +不限量看优质回答私信答主深度交流精彩内容一键收藏 +登录 +查看全部 12 个回答 +知秋 +游戏性能优化 +​ + 关注 + 专栏文章汇总,持续更新: 高通 Adreno GPU 最佳实践 0--汇总 - 知乎 @@ -114,3 +161,182 @@ tags: [zhihu, saved] 尽管许多应用的目标是“尽可能达到显示硬件的最大刷新速度”,但即便应用受垂直同步限制,仍存在优化空间,且优化收益不仅限于提升帧率。 移动应用的多数性能问题最终都与“功耗/电池续航”相关。即便应用通过“受垂直同步限制”(而非受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 千万创作者的优质提问、专业回答、深度文章和精彩视频尽在知乎。 +立即登录/注册