碰撞与查询

自动关联目录:碰撞与查询

官方依据:官方 Gameplay Systems 正文点名 Physics 包含 Collision 与 Raycasts(已核实)。

1. 定位

碰撞查询是游戏里用得最多的物理操作:射击判定、视线检测、落地检测、爆炸范围、交互拾取。

一句话定位:绝大多数项目只需要"查询",不需要"模拟"。把这两件事分开,是物理性能的第一道分水岭。

2. 碰撞设置

概念说明
Collision EnabledNoCollision / QueryOnly / PhysicsOnly / QueryAndPhysics
Object Type对象类别(WorldStatic / Pawn / …)
Collision Response对每个 Channel 的响应:Ignore / Overlap / Block
Trace Channel射线使用的通道
Collision Preset以上组合的预设

原则:能 QueryOnly 就不要 QueryAndPhysics——不需要模拟的物体开着物理,白白付出模拟与同步成本。

通道设计要提前规划:通道数量有限,且"哪个通道检测什么"一旦混乱,后面全是 Ignore 打补丁。

3. 三种查询

类型接口用途
Line TraceLineTraceSingle / Multi射线(射击、视线)
Shape SweepSweepSingle / Multi带体积扫掠(角色移动、连续判定)
OverlapOverlapBlocking / Multi范围检测(爆炸、拾取)
FCollisionQueryParams Params(SCENE_QUERY_STAT(MyTrace), /*bTraceComplex=*/false);
Params.AddIgnoredActor(GetOwner());          // 忽略自身
FHitResult Hit;
bool bHit = GetWorld()->LineTraceSingleByChannel(
    Hit, Start, End, ECC_GameTraceChannel1, Params);
参数说明
Trace Channel / Profile Name用通道还是配置
bTraceComplex用三角形精度(更准但明显更慢)
Query Params忽略自身/只命中某类
DrawDebugType调试可视化(ForDuration / Persistent)

4. 性能要点

要点说明
加通道过滤最便宜的优化
避免 bTraceComplex除非真的需要三角形精度
限制返回数量Multi 会返回全部命中
降低频率不必每帧 Trace
异步 Trace大量射线时用异步版本
简化碰撞体用简单形状而非复杂网格
复杂网格做碰撞慢且行为怪异(应另建简化碰撞体)

热路径上的 Trace(如武器射线):过滤 + 非复杂 + Single 而非 Multi。

5. 代价与权衡

设计收益代价什么时候不该用
QueryAndPhysics又能查又能模拟模拟与同步成本不需要模拟时必须关掉
bTraceComplex精确到三角形成本显著上升大多数判定用简单碰撞体足够
Multi Trace拿到所有命中数量不可控只要第一个就用 Single
Sweep 代替 Line连续检测,不会穿薄物体比 Line 贵高速小物体才需要
异步 Trace不阻塞结果延迟一帧或更多需要同帧结果时不可用
每次都新建 QueryParams—少量开销,热路径可缓存—

6. 踩坑与排查

坑现象怎么验证
没忽略自身打到自己AddIgnoredActor / AddIgnoredComponent
复杂网格做碰撞体慢、行为怪检查碰撞体是否为简化形状
Trace 通道选错该命中的没命中检查通道与 Response
忘了 QueryOnly白付模拟成本检查 Collision Enabled
在构造函数里 TraceWorld 还不可用(见 UObject)移到 BeginPlay 之后
每帧多条 Multi Trace卡顿降频 + Single + 过滤
高速物体穿透用 Line 而非 Sweep改用 Sweep 或加大步长检测
异步 Trace 结果用错帧逻辑时序错明确异步的到达时机

7. 排查顺序

1. 打不到?→ 通道 Response + 是否忽略自身
2. 打到自己?→ AddIgnoredActor
3. 慢?→ bTraceComplex / Multi / 频率 / 碰撞体复杂度
4. 穿透?→ 用 Sweep
5. 看不到?→ DrawDebugType 可视化确认起点终点与命中

8. 调试

手段用途
DrawDebugType画出射线与命中点
Show > Collision显示碰撞体
pxvis collision / 物理调试视图物理调试绘制
stat physics / stat collision物理与碰撞统计

参考