What

UE中碰撞查询有两种不同的接口。下面以line举例:

  1. 想查询从A点到B点有哪些物体可以响应某个channel,返回这些物体。称为TraceByChannel。传参为ETraceTypeQuery枚举类型。Pasted image 20241012164858.png Pasted image 20241012164709.png Pasted image 20241012164724.png
  2. 想查询从A点到B点的有没有指定物体类型的物体,并返回他们。称为TraceByObjectType。传参为EObjectTypeQuery枚举类型。Pasted image 20241012165223.png Pasted image 20241012165201.pngPasted image 20241012165212.png

但在内存里,上面两种枚举类型会以ECollisionChannel的形式存在。

Why

这是因为UE希望在蓝图里区分开这两种类型。但实际使用时,会将两者和ECollisionChannel映射起来。Pasted image 20241012171211.png

How

在内存里,实际都会转换成ECollisionChannel,但使用上还是有所区别。这个区别来自它们用法上。对于TraceByChannel,可以返回Touch/Block的物体;但对于TraceByObjectType,所有的物体都认为时Block的(如果是Trace而非overlap)。因为它查询的是有没有,所以不关心响应。
创建Filter数据时,也会相应的不一样:
Pasted image 20241012172524.png Pasted image 20241012172533.png