
引子小李的穿墙惯犯上回说到小李把 Update、FixedUpdate、LateUpdate 三兄弟的分工捋得清清楚楚。这天他兴致勃勃地给射击游戏做子弹结果一测试又撞上一桩让他抓耳挠腮的怪事老师傅,又见鬼了!我给游戏做了子弹——慢慢飞的时候,打墙上’啪’一下,好好的;可我把子弹速度一调快,想做个’狙击枪高速弹’,结果——**子弹’嗖’地一下,直接从墙里穿过去了!眼睁睁看着它穿墙而过**,墙跟纸糊的一样,压根没挡住!****更邪门的是:同一堵墙、同一颗子弹,慢速就撞得住、快速就穿得过!我反复检查,墙有碰撞器、子弹也有碰撞器,配置一模一样啊!**还有个玩家反馈:‘我这游戏里,角色跳得慢就好好落地,一旦从高处快速坠落,噗’一下就掉出地板、掉进虚空了!’**老师傅,这就怪了——为啥’慢’就撞得住、快’就穿得过?难道速度一快,碰撞检测就失灵了?这到底是啥毛病?老师傅一听捻须笑道“你这毛病江湖上有个专门的名号叫’隧穿Tunneling——高速物体像挖了条隧道似的唰’一下从墙里钻过去了你别急着怪墙、怪子弹它们都没错。根子在于你游戏默认用的那套’碰撞检测’的法子——它是’一帧拍一张照’的’离散’法子速度一快它就’看漏了’今天我就教你那道专治高速穿墙的解药——‘连续碰撞检测’一套’全程盯防、绝不看漏’的功夫”第一章先懂病根——“离散检测”一帧拍一张照快了就看漏老师傅说要治这病先得懂默认那套检测法子是怎么看漏的。它叫离散碰撞检测工作方式就像一个人一帧睁一次眼、拍一张照两次睁眼的间隙全是盲区┌────────────────────────────────────────────────┐ │ 病根:离散检测——一帧拍一张照,间隙全是盲区! │ │ │ │ 默认的检测方式:每一帧,在物体【当前所在的位置】, │ │ 拍一张照,检查这一刻有没有和别的东西重叠。 │ │ │ │ 慢速子弹(每帧只挪一点点): │ │ 第1帧 第2帧 第3帧 │ │ 子弹○ ──→ 子弹○ ─→ [墙███] │ │ ↑第3帧拍照: │ │ 子弹和墙重叠了!→撞上!✅│ │ → 每帧挪得少,总有一帧正好拍到重叠,撞得住! │ │ │ │ 高速子弹(每帧挪一大截): │ │ 第1帧 第2帧 │ │ 子弹○ ─────[墙███]─────→ 子弹○ │ │ ↑墙前 ↑墙后! │ │ 第1帧拍照:子弹在墙前,没重叠 │ │ 第2帧拍照:子弹已在墙后,也没重叠! │ │ → 关键:子弹穿过墙这一瞬,发生在 │ │ 两次拍照的【间隙】里,没被任何一张照片拍到! │ │ → 检测器一脸懵:我两张照片都没见它俩重叠呀? │ │ → 于是看漏了,子弹大摇大摆穿墙而过! │ │ │ │ → 病根:检测只看一个个孤立的瞬间点, │ │ 快到一帧就跨过整堵墙,就从盲区溜走了! │ └────────────────────────────────────────────────┘病根·离散检测Unity 默认的碰撞检测叫离散Discrete——它的工作方式是每一帧只在物体当前所在的这个位置拍一张快照检查这一瞬间有没有和别的东西重叠。为什么慢就撞得住慢速子弹每帧只挪一点点所以在它靠近墙的过程中总有那么一帧正好把它拍在和墙重叠的位置上——于是检测器发现了重叠判定撞上稳稳当当。为什么快就穿过去高速子弹每帧挪一大截——第 1 帧拍照子弹还在墙前没重叠第 2 帧拍照子弹已经蹿到墙后去了也没重叠而子弹真正穿过墙的那一瞬间恰恰发生在两次拍照的间隙里没被任何一张照片捕捉到于是检测器一脸茫然“我这两张照片都没见它俩重叠啊”——就这么**“看漏了”**子弹大摇大摆地穿墙而过。一句话点破离散检测的软肋是它只盯着一个个孤立的瞬间点却看不见两点之间的过程。物体一旦快到一帧就跨过整堵墙就从这检测的盲区里溜走了。小李恍然“原来如此!默认的’离散检测’是每帧只在物体当前位置’拍一张照’查重叠!慢速子弹每帧挪一点点、总有一帧正好拍到和墙重叠、就撞住;高速子弹每帧挪一大截——第1帧还在墙前、第2帧已到墙后,穿墙那一瞬发生在两次拍照的间隙里、没被任何照片拍到,就’看漏’穿过去了!病根是它只看孤立的瞬间点、看不见两点之间的过程!那……这’解药’又是怎么补上这盲区的?”第二章核心解药——“连续检测”不看点看整条运动轨迹老师傅说解药就是那道功夫——“连续碰撞检测Continuous”。它的思路极妙既然物体是从A点飞到B点的那我就不只看A点和B点这两张快照而是把A到B这一整条飞行轨迹都扫描一遍看沿途撞没撞到东西┌────────────────────────────────────────────────┐ │ 解药:连续检测——扫描整条运动轨迹,绝不看漏! │ │ │ │ 离散检测(看点): │ │ 只查这一帧的位置这一个孤立的点 │ │ → 两点间的过程是盲区! │ │ │ │ 连续检测(看路径): │ │ 不只看起点终点,更把从上一帧位置 │ │ 到这一帧位置之间【走过的整条路径】, │ │ 像用探照灯一样,【全程扫描】一遍! │ │ │ │ 同样一颗高速子弹: │ │ 上一帧○───────[墙███]───────→○这一帧 │ │ └──── 扫描这整条路径 ────┘ │ │ 沿途一路扫:路上碰到啥没? │ │ → 咦!路径正好穿过了墙! │ │ → 立刻判定:在【碰到墙的那一点】 │ │ 就该停下、就该命中! ✅ │ │ │ │ ┌──────────────────────────────────┐ │ │ │ 离散:眨眼快照,只看落脚的点 │ │ │ │ 连续:全程追踪,扫遍走过的路 │ │ │ └──────────────────────────────────┘ │ │ │ │ 开启方式:把高速物体的Rigidbody, │ │ 碰撞检测模式从Discrete改成【Continuous】 │ │ │ │ → 不再只盯落脚的瞬间,而是追踪走过的 │ │ 全程——再快的物体,也逃不过沿途的盯防! │ └────────────────────────────────────────────────┘核心解药·连续检测Continuous连续碰撞检测的思路极其巧妙——它不再只查这一帧的落脚点这一个孤立的位置而是把物体**从上一帧的位置到这一帧的位置之间走过的那一整条路径像用探照灯一样全程扫描一遍**看沿途有没有撞到东西。它如何治穿墙还是那颗高速子弹——虽然它上一帧在墙前、这一帧在墙后两个落脚点都没和墙重叠但连续检测会扫描这两点之间的整条飞行路径一扫就发现咦这条路径正好穿过了墙于是立刻判定子弹应该在碰到墙的那一点停下、命中——穿墙的Bug当场根治一图看懂区别离散像眨眼拍快照只看你落脚的那个点连续像探照灯全程追踪扫遍你走过的整条路。怎么开启把高速物体的 Rigidbody其碰撞检测模式Collision Detection从默认的Discrete改成Continuous或更强的Continuous Dynamic即可。精髓所在连续检测的智慧是从只盯落脚的瞬间点升级成了追踪走过的全过程——如此再快的物体也逃不过它对沿途每一寸路径的盯防。小李眼睛一亮“妙啊!连续检测不只看起点终点两个孤立的点,而是把’从上一帧到这一帧走过的整条路径’像探照灯一样全程扫一遍!高速子弹虽然两个落脚点都没和墙重叠,但一扫路径就发现’正好穿过了墙’,立刻在碰墙那点判定命中——穿墙当场根治!离散是眨眼快照只看落脚的点、连续是探照灯全程扫遍走过的路!把Rigidbody改成Continuous就行!那……这么厉害,为啥不给所有物体都开上连续检测、一劳永逸呢?”第三章关键权衡——为啥不全开好钢要用在刀刃上老师傅赞许地点头——这正问到了最关键的分寸连续检测虽好却比离散费力气得多所以绝不能无脑全开得该用才用、好钢用在刀刃上┌────────────────────────────────────────────────┐ │ ⚖️ 权衡:连续检测更费力,绝不能无脑全开! │ │ │ │ 连续检测的代价: │ │ 离散只查一个点→ 轻松、省力 │ │ 连续要扫一整条路径→ 计算量大得多、费性能! │ │ │ │ ❌ 无脑全开(给所有物体都开连续): │ │ 满屏几百个物体都在全程扫描路径 │ │ → 性能被大量消耗、游戏卡顿掉帧! │ │ (好比给每件小事都派最贵的专家全程盯防, │ │ 纯属浪费!) │ │ │ │ ✅ 该用才用·好钢用在刀刃上: │ │ │ │ 需要连续检测的(高速!易穿墙!): │ │ · 子弹、炮弹、飞镖 → 开 Continuous! │ │ · 高速坠落/冲刺的角色 │ │ → 这些快到会看漏的,才值得费这力气! │ │ │ │ 用默认离散就够的(慢速/大部分物体): │ │ · 走路的角色、滚动的箱子、缓慢的平台 │ │ → 反正慢、不会穿,离散又快又够用! │ │ │ │ → 精髓:分清哪些快到需要盯防、哪些慢到无需, │ │ 把宝贵的性能,精准花在真正需要的地方! │ └────────────────────────────────────────────────┘关键权衡·不能全开连续检测虽好却有代价——离散只查一个点轻松省力连续要扫描一整条路径计算量大得多、更费性能。天下没有免费的午餐这份全程盯防的稳妥是用更高的性能开销换来的。无脑全开的后果如果不加分辨给场景里所有物体都开上连续检测——满屏几百个物体个个都在全程扫描路径性能就会被大量吞噬游戏卡顿掉帧。这好比给每一件鸡毛蒜皮的小事都派最昂贵的专家全程盯防纯属浪费。✅正解·好钢用在刀刃上聪明的做法是分清主次、按需分配——需要开连续的那些快到会被看漏的子弹、炮弹、飞镖、高速坠落或冲刺的角色 → 它们值得费这份力气用默认离散就够的慢速的、大部分物体走路的角色、滚动的箱子、缓慢的平台 → 反正慢、不会穿墙离散又快又够用何必浪费精髓所在分清哪些快到需要盯防、哪些慢到无需盯防把宝贵的性能精准地花在真正需要的地方——这份该用才用、好钢用在刀刃上的分寸才是高手的做法。小李彻底通透“全懂了!连续检测虽好但更费性能——离散查一个点轻松、连续扫一整条路径费力!无脑全开会让满屏物体都全程扫描、卡顿掉帧,好比给每件小事都派最贵专家全程盯防、纯属浪费!正解是好钢用在刀刃上:高速易穿墙的(子弹炮弹、高速坠落的角色)才开连续、值得费这力气;慢速的大部分物体(走路角色、滚箱子)用默认离散又快又够用!分清哪些快到需盯防、哪些慢到无需,把宝贵性能精准花在真正需要处!这道连续碰撞检测我彻底摸透了!”第四章终极总结——连续碰撞检测的完整图谱小李把这场治穿墙的领悟浓缩成一张表┌────────────────┬──────────────────────────────────┐ │ 连续碰撞检测 │ 要点 │ ├────────────────┼──────────────────────────────────┤ │ 病症 │ 隧穿:高速物体穿墙而过 │ │ 病根 │ 离散检测只拍孤立瞬间,漏掉过程 │ │ 为何慢的撞得住 │ 慢→总有一帧正好拍到重叠 │ │ 为何快的穿过去 │ 快→穿墙发生在两次拍照的间隙里 │ │ 解药 │ 连续检测:扫描整条运动轨迹 │ │ 离散vs连续 │ 离散看点、连续看路 │ │ 开启方式 │ Rigidbody→Collision→Continuous │ │ 关键权衡 │ 连续费性能,不能无脑全开 │ │ 分寸 │ 好钢用刀刃:高速的才开、慢的用默认 │ │ 一句话 │ 别只看孤立的落脚点、要盯住走过的 │ │ │ 全过程;而盯防要用在真正快处! │ └────────────────┴──────────────────────────────────┘小李摸着这张表悟出了连续碰撞检测的题眼我总算把这’穿墙’的病治明白了——**原来那漏检的病根,竟是只顾’一帧一帧地抓拍孤立的瞬间’,却看不见’瞬间与瞬间之间那段真实走过的过程’;而解药,便是把目光从’孤立的落脚点’,挪到’完整的运动轨迹’上——越是快速前进的东西,越容易在盯防的间隙里出岔子,越需要盯住它’走过的全程’;可这份严密的盯防又代价不菲,故而更要分清轻重、好钢用在刀刃上**!****而它给我最深的启示是:看人、看事,若只靠’偶尔抽查几个孤立的瞬间快照’,极易漏掉那些发生在’快速变化的间隙’里的真相;真正可靠的洞察,是盯住’连续的过程与轨迹’,而非孤立的几个点。而越是高速前进、剧烈变化的人与事,越藏着容易被’看漏’的隐患,越值得投入这份连续的关注——同时也别忘了,这份关注是有成本的,当用在真正快速、真正要紧之处。尾声一道全程盯防的功夫亦是人生的智慧小李这场对连续碰撞检测的领悟从眼睁睁看子弹穿墙的怪事出发摸透了那道治穿墙的功夫——离散检测漏在只拍孤立瞬间连续检测胜在追踪完整轨迹而这份盯防又要好钢用在刀刃上。但当我们合上书会发现这道全程盯防的功夫背后竟也舒展着几分耐人寻味的人生哲理。第一别只看孤立的快照要盯住连续的过程——真相往往藏在瞬间与瞬间的间隙里。这道功夫最根本的洞察是——离散检测的漏检恰恰在于它只抓拍孤立的瞬间点却看不见瞬间之间那段真实走过的过程而连续检测的可靠正在于它盯住了完整的运动轨迹。这何尝不是一记对认知的深刻点拨我们看人、看事、下判断太容易依赖几张孤立的快照——凭某人某一刻的一句话、一个表现、一次偶然的抽查,就急着给他盖棺定论。可这种抽查式的判断恰如那漏检的离散检测:它极易漏掉那些发生在快照与快照之间的真相——那个当众彬彬有礼的人,或许恰在你没看见的间隙里刻薄待人;那个偶尔表现平平的人,或许正在你没留意的过程中默默精进。真正可靠的洞察从不满足于几个孤立的瞬间点,而是耐心地追踪连续的过程与轨迹:看一个人,不看他偶尔的高光或失手,而看他一贯的言行轨迹;评一件事,不看某个孤立的结果快照,而看它完整的来龙去脉。因为真相与本质往往就藏在那些被抽查漏掉的过程里。盯住连续的轨迹、而非孤立的快照,才不至于被瞬间的假象所蒙蔽——这是看透人事最朴素、也最可靠的功夫。第二越是高速前进、剧烈变化越藏着容易被看漏的隐患——快进时更要密切盯防。那慢的撞得住、快的穿过去的现象藏着一个耐人寻味的规律——物体越是高速越容易在检测的间隙里溜走出岔子越快越需要连续的盯防。这道破了一个关于变化与风险的深刻真理:人生里,那些高速前进、急剧变化的阶段,恰恰是最容易在不知不觉间出岔子的高危时刻。一段关系升温太快往往在热烈的间隙里埋下了没看清的隐患;一项事业扩张太猛,常常在狂奔的盲区里积累了没察觉的漏洞;一个人顺风顺水、志得意满地高速前进时,也最容易在得意的间隙里,漏看了脚下正在逼近的那堵墙。就像慢速的子弹撞得住、高速的却穿墙而过——慢行时,凡事看得清、来得及;可一旦进入高速,那些平时轻易能察觉的风险,就极可能从盯防的间隙里悄悄溜过、酿成大祸。真正清醒的人懂得越是顺利、越是快速前进的时候,越不能松懈盯防,反而要投入更密切、更连续的关注,盯紧自己高速走过的每一寸轨迹。快,从不意味着可以放松警惕;恰恰相反,越快,越要睁大眼睛。第三严密的盯防代价不菲要好钢用在刀刃上——把宝贵的关注精准投给真正要紧处。那不能无脑全开、该用才用的权衡藏着一份难得的清醒——连续检测虽好却费性能故而绝不给所有物体全开而是分清主次、只把它用在高速易穿墙的关键物体上。这道破了一个关于精力分配的处世智慧:我们能投入的深度关注与精力,如同那宝贵的性能,是极其有限的,绝不可能对每一件事都投入全程盯防式的极致关注。那种事无巨细、样样都想紧盯到底的人看似认真负责,实则把有限的精力平摊在了一堆无关紧要的小事上——如同给每个慢速物体都开连续检测,白白耗尽性能、最终在真正要紧处反而无力兼顾(卡顿掉帧)。真正高效的人懂得先分清哪些是快到会出大岔子、必须密切盯防的要紧事(如子弹),哪些是慢而无害、大可放心用最省力方式对待的寻常事(如滚动的箱子);然后把最深、最连续的关注,精准地投给前者,对后者则从容放手、不必事事紧盯。好钢用在刀刃上该盯紧的绝不松懈、该放手的绝不浪费精力——这份分清轻重、精准投入的分寸,才能让有限的关注发挥最大的价值。什么都想紧盯的人,终将什么都盯不好。下次当你只凭几张孤立的快照就急着给人下定论或在顺风顺水、高速前进时放松了警惕又或事无巨细样样都想紧盯到底时请记得这道全程盯防的智慧——像那 **追踪轨迹的连续检测**那样别只看孤立的落脚点要盯住连续的过程与轨迹真相往往藏在被抽查漏掉的间隙里像那 **高速物体的隧穿警示**那样越是高速前进、剧烈变化越藏着容易被看漏的隐患快进时更要密切盯防更像那 **好钢用在刀刃上的性能权衡**那样把有限而宝贵的深度关注精准地投给真正快速、真正要紧之处该盯紧的绝不松懈、该放手的绝不浪费。于是你成了那个看得透过程、警惕得住高速、又分得清轻重的通达之人。“Unity 的连续碰撞检测”就是这门关于盯住连续过程而非孤立快照、高速前进更需密切盯防、好钢用在刀刃上的、朴素而深刻的智慧。它告诉我们别只看孤立的快照、要盯住连续的过程真相藏在瞬间的间隙里越是高速前进剧烈变化、越藏着容易被看漏的隐患快进时更要密切盯防严密的盯防代价不菲、要好钢用在刀刃上把宝贵关注精准投给真正要紧处。它像一句朴素的箴言提醒着我们——别只凭几张孤立的快照就给人给事盖棺定论学会盯住连续的过程与轨迹因为最要紧的真相往往就藏在那些被抽查漏掉的间隙里别在顺风顺水、高速前进时放松了警惕越是快速变化的时刻越藏着容易被看漏的隐患越要投入密切而连续的盯防、盯紧自己走过的每一寸轨迹别事无巨细、样样都想紧盯到底懂得有限的深度关注是宝贵的、要好钢用在刀刃上把它精准投给真正快速、真正要紧的地方该盯紧的绝不松懈、该放手的绝不浪费——一个懂得盯住过程、警惕高速、精准投入的人才能像那周密的连续碰撞检测不被孤立的快照蒙蔽在高速前进时也盯得住脚下的墙把宝贵的关注精准花在刀刃上于是识人者不被瞬间的假象所惑进取者不在狂奔中埋下隐患谋事者不在琐碎里耗尽心力活成一个既看得透过程、又警惕得住高速、更分得清轻重的清醒而通达之人。这就是藏在Unity 连续碰撞检测那道全程盯防的功夫背后最深、也最美的浪漫。