引言:碰撞体,你以为简单,其实全是坑
在火星人教育教UE5这些年,我见过太多学员,甚至一些有项目经验的“老手”,在碰撞体(Collision)设置上翻车。碰撞体看起来就是加个盒子、设个预设,能有多难?但正是这个“简单”的环节,让角色卡墙、子弹穿模、物理模拟飞天、性能暴跌……各种诡异现象层出不穷。今天,我不讲基础参数,直接上硬货——把从新手到进阶最容易踩的8个坑扒个底朝天,每个坑都按“现象→根因→解决方案→预防措施”拆解,让你少走弯路,省下通宵调试的时间。
记住,碰撞体不是“加上就行”,它关乎物理查询(Query)和模拟(Simulation)两条底层管线,牵一发动全身。下面这些坑,都是我带项目、带学生时用真金白银的加班换来的教训。

坑1:碰撞预设乱选,角色卡在墙角动弹不得
现象:角色移动时,碰到墙壁或拐角,直接卡住,怎么推都推不动,甚至抖动、滑步。
根因:碰撞预设(Collision Preset)的通道(Channel)响应配置错误。UE5默认的碰撞通道分两类:Object Type(对象类型)和Trace Channel(追踪通道)。角色胶囊体通常用Pawn预设,墙壁用BlockAll或WorldStatic。但很多人为了省事,把墙壁设为BlockAll,然后角色预设里的“Pawn”通道对“WorldStatic”的响应设成了Block,却忘了检查“Visibility”或“Camera”通道,导致角色移动组件(CharacterMovementComponent)的扫描检测(Sweep)被意外阻挡。更隐蔽的是,两个碰撞体如果都设为BlockAll,它们之间的所有通道都相互阻挡,包括不该挡的。
解决方案:打开项目设置→碰撞,仔细检查通道矩阵。角色胶囊体预设应只对WorldStatic、WorldDynamic、Pawn等必要通道设为Block,对Camera、Visibility等设为Ignore。墙壁预设用自定义的“Wall”预设,只对Pawn和Vehicle等设为Block,对Visibility设为Ignore(除非你需要射线检测)。关键原则:用自定义预设,别用默认的BlockAll。
预防措施:项目初期就规划好碰撞通道矩阵,写个文档。每个静态网格体导入时,立刻指定正确的碰撞预设,别偷懒用默认。用“显示→碰撞”调试视图(快捷键Alt+C)实时查看碰撞体颜色,红色代表阻挡,绿色代表重叠,蓝色代表忽略。
技巧:角色胶囊体(Capsule Component)的碰撞预设选“Pawn”,并把“Pawn”通道对“Pawn”的响应设为Ignore,避免角色之间互相卡住。
坑2:复杂网格体自动生成碰撞,性能直接爆炸
现象:场景里放了几十个高面数模型,帧率从120掉到30,用Stat命令一看,物理耗时(PhysX/Chaos)飙高。
根因:导入静态网格体时,勾选了“自动生成碰撞”(Auto Generate Collision),UE5默认用凸包(Convex Hull)算法生成碰撞体。对于高面数、复杂形状的模型(比如雕塑、植被),凸包会生成大量三角形,物理引擎每帧都要做碰撞检测,开销巨大。更糟的是,如果模型有内部结构,凸包会把它包成一个实心体,导致物理模拟异常。
解决方案:手动创建简化碰撞体。对于静态物体,用盒体(Box)、球体(Sphere)、胶囊体(Capsule)或凸包分解(Convex Decomposition)生成多个简单凸包。UE5的“碰撞”菜单里有“添加盒体简化碰撞”等选项。对于植被,用单个胶囊体或球体近似。对于复杂但不需要精确碰撞的物体,直接用“使用简单碰撞作为复杂碰撞”(Use Simple Collision as Complex)。
预防措施:建立导入规范:所有静态网格体默认不自动生成碰撞,由美术或关卡设计师手动添加。用“碰撞复杂度”(Collision Complexity)设置:简单碰撞用于物理模拟,复杂碰撞用于精确射线检测(如瞄准)。定期用“统计→物理”查看碰撞体数量,超过50个三角形的简单碰撞就要警惕。
| 碰撞类型 | 适用场景 | 性能开销 | 推荐做法 |
|---|---|---|---|
| 盒体/球体/胶囊体 | 绝大多数静态物体 | 极低 | 首选,手动添加 |
| 凸包(Convex Hull) | 中等复杂度物体 | 中 | 限制顶点数(<32) |
| 凸包分解 | 复杂但需精确碰撞 | 高 | 控制凸包数量(<10) |
| 复杂碰撞(三角形网格) | 仅用于射线检测 | 极高 | 避免用于物理模拟 |

坑3:物理资产(Physics Asset)没调,角色布娃娃满天飞
现象:角色死亡后触发布娃娃(Ragdoll),身体扭曲成麻花,或者直接飞上天,关节乱转。
根因:物理资产(Physics Asset)中的碰撞体(Bodies)和约束(Constraints)配置不当。UE5的骨骼网格体需要生成物理资产,默认自动生成的碰撞体往往过大或过小,约束角度限制(Angular Limits)没设或设错。比如,膝盖关节没有限制旋转轴,导致布娃娃腿向后翻折;碰撞体之间互相穿插,产生巨大排斥力。
解决方案:打开物理资产编辑器,逐个调整碰撞体:用胶囊体或球体紧密包裹骨骼,避免重叠。设置约束:对于铰链关节(如膝盖、肘部),锁定两个旋转轴,只保留一个;设置合理的角度限制(如膝盖弯曲0~120度)。调整质量(Mass)和阻尼(Damping),避免抖动。最后用“模拟”按钮测试,反复微调。
预防措施:角色模型在DCC软件(如Maya、Blender)中就要保证骨骼比例正确,避免极端形状。导入UE5后,立即生成物理资产并手动调整,不要依赖自动生成。对于重要角色,可以请动画师配合,在物理资产中设置好约束后,用“约束”工具可视化调试。
注意:物理资产中的碰撞体不要用复杂碰撞,一律用基本几何体。约束的“软限制”(Soft Limit)可以减轻布娃娃的僵硬感,但别滥用。
坑4:重叠事件(Overlap)不触发,触发器成了摆设
现象:放了个触发器盒子(Trigger Box),玩家走进去什么也没发生,Print String也不打印。
根因:重叠事件需要双方碰撞体都勾选“生成重叠事件”(Generate Overlap Events),并且碰撞响应中至少有一方对另一方的通道设为“重叠”(Overlap)。常见错误:触发器盒子预设是Trigger,默认对Pawn通道是Overlap,但玩家角色的胶囊体预设是Pawn,默认对WorldDynamic是Block,导致直接阻挡而不是重叠。另外,如果触发器盒子没有勾选“生成重叠事件”,或者玩家角色没有勾选,事件也不会触发。
解决方案:确保触发器盒子的碰撞预设为“Trigger”,并勾选“生成重叠事件”。玩家角色的胶囊体也要勾选“生成重叠事件”。检查碰撞矩阵:Trigger预设对Pawn通道应为Overlap,Pawn预设对WorldDynamic(触发器所属类型)应为Overlap或Ignore(但Ignore不会触发事件,所以必须Overlap)。如果还是不行,用“显示→碰撞”查看颜色,重叠区域应显示绿色。
预防措施:建立触发器规范:所有触发器使用统一的“Trigger”预设,并默认勾选生成重叠事件。在角色蓝图中,用“On Component Begin Overlap”事件时,注意检查“Other Actor”是否有效。测试时用“碰撞调试”视图确认重叠状态。
坑5:射线检测(Line Trace)打不中,因为碰撞通道选错
现象:用Line Trace By Channel做射击检测,明明瞄准了敌人,却返回false,打不中。
根因:射线检测需要指定追踪通道(Trace Channel),默认是Visibility。但很多物体的碰撞预设对Visibility通道的响应是Ignore(比如角色胶囊体默认对Visibility是Ignore),导致射线直接穿过。另一种情况:物体没有开启“对可见性通道阻挡”(Block Visibility),或者碰撞体本身没有复杂碰撞(Complex Collision),而射线检测默认使用简单碰撞。
解决方案:对于需要被射线检测的物体,确保其碰撞预设对Visibility通道设为Block,或者使用自定义的追踪通道(如“Weapon”)。在Line Trace节点中,勾选“Trace Complex”以使用复杂碰撞(如果物体有复杂碰撞)。更推荐的做法:创建自定义追踪通道“Weapon”,在碰撞矩阵中设置相关预设对该通道的响应。
预防措施:项目初期规划好追踪通道,比如Visibility用于鼠标拾取,Camera用于摄像机遮挡,Weapon用于射击。所有可被射击的物体(角色、可破坏物)的碰撞预设都要对Weapon通道设为Block。定期用“射线检测调试”可视化。
坑6:物理约束(Physics Constraint)断裂,物体飞出去
现象:用物理约束连接两个物体(比如吊桥、绳索),一模拟就炸开,物体乱飞。
根因:约束的“断裂阈值”(Break Threshold)设置不当,或者约束的两端物体质量差异过大,导致受力不均。另外,约束的位置(Position)和旋转(Rotation)没有对齐,产生初始应力。UE5的物理约束基于Chaos物理引擎,对初始状态很敏感。
解决方案:在约束蓝图中,调整“线性断裂阈值”和“角度断裂阈值”,先设大一点(比如10000),测试稳定后再降低。确保两个物体的质量相近(调整Mass),或者使用“质量缩放”(Mass Scale)。约束的位置和旋转要精确对齐,可以用“捕捉”工具。对于复杂结构,用多个约束分段连接,减少单点应力。
预防措施:在创建约束前,先规划好物理结构,避免刚性连接。用“模拟”模式逐步测试,从简单到复杂。开启“显示→物理→约束”查看约束的力和断裂状态。
坑7:移动平台碰撞,角色站上去滑走
现象:角色站在移动平台上,平台移动时角色滑落,或者抖动。
根因:移动平台的碰撞体没有设置为“可移动”(Movable),或者角色移动组件(CharacterMovementComponent)没有启用“基于移动平台的移动”(Move on Moving Platform)。另外,平台的碰撞预设可能对Pawn通道是Block,但平台本身没有勾选“模拟物理”或“可移动”,导致角色无法正确附着。
解决方案:将平台静态网格体的移动性设为“可移动”(Movable)。在角色蓝图中,确保CharacterMovementComponent的“移动平台”相关选项开启(默认是开启的)。如果平台是蓝图,确保其根组件是移动的。对于复杂平台,可以用物理约束或附加(Attach)方式。
预防措施:所有需要移动的物体,移动性必须设为Movable,并检查碰撞预设。测试时用“显示→碰撞”查看角色与平台的碰撞状态。
坑8:碰撞体缩放导致物理模拟异常
现象:缩放物体后,物理模拟变得奇怪,比如物体下陷、弹跳异常。
根因:UE5中,非均匀缩放(Non-Uniform Scale)会破坏物理碰撞体的形状,因为碰撞体是基于原始网格体生成的,缩放后碰撞体可能变形,导致物理引擎计算错误。尤其是静态网格体,如果缩放值不是1,碰撞体可能不匹配。
解决方案:尽量避免非均匀缩放。如果需要缩放,在DCC软件中调整模型尺寸,重新导入。或者,在UE5中使用“缩放”时,确保碰撞体也相应缩放(但物理引擎不支持非均匀缩放的碰撞体)。对于必须缩放的物体,使用“简单碰撞”并手动调整碰撞体大小,或者用多个碰撞体组合。
预防措施:建模时统一单位,避免在UE5中缩放。如果必须缩放,用“均匀缩放”(Uniform Scale),并检查碰撞体是否匹配。用“显示→碰撞”查看缩放后的碰撞体。

行业案例:从翻车到翻盘
去年,我们有个学员参与一个VR家装项目,客户要求实时走动。一开始,所有家具都用自动生成碰撞,结果VR里一靠近沙发就卡住,帧率掉到20。后来按上述方法,家具全部换成盒体简化碰撞,墙壁用自定义预设,帧率回到90,体验流畅。另一个案例是射击游戏,射线检测总是打不中敌人,检查发现敌人胶囊体对Visibility通道是Ignore,改成Block后解决。这些坑,你未必全踩,但踩一个就够受的。
关于火星人教育
碰撞体设置只是UE5物理系统的冰山一角,但正是这些细节决定项目成败。在火星人教育,我们创办24年来专注数字艺术与AIGC实战职业技能培训,课程涵盖AI漫剧创作、AIGC视觉设计、UE5游戏特效、室内全屋定制、MAYA三维动画、C4D动态设计、工业设计、NUKE影视后期、摄影摄像实训。北京、深圳双校区开设线下面授班,面向美术生、在校大学生及意向转行的职场人群,以项目化实训教学,夯实专业技能,助力就业与职业提升。如果你想系统学习UE5,避开更多坑,欢迎咨询:010-65918670。








评论(0)