物理查询
中级 程序员
物理查询(Physics Query) 是一组用于在给定模拟中测试和检索物理对象的操作。这些查询中最众所周知的形式是 RayCast(射线检测),它通过在场景中追踪一条不可见的直线来找到相交的可碰撞体。
Note
物理查询使用碰撞体形状来查找对象。它们会忽略没有附加可碰撞体组件或没有设置碰撞体形状的实体,参见可碰撞体。
查询类型
- 射线检测(Raycast) — 从某个点沿某个方向发射一条射线,并检索它命中的对象。
- 扫掠检测(Sweepcast) — 沿某个方向投射一个形状,并检索它命中的对象。
- 重叠检测(Overlap) — 检索与某个区域重叠的对象。
查询特定的碰撞层遮罩
可碰撞体被组织为层(layer),可用于在查询中过滤碰撞。

默认情况下,每个查询都会检查所有层。这可以通过指定碰撞层遮罩(collision mask) 来更改。
var mask = CollisionMask.Layer3;
var isHit = simulation.RayCast(Vector3.ZERO, -Vector3.UnitY, 3f, out var hit, mask);
你可以使用按位和移位运算符为多个层创建遮罩。
// | 将多个遮罩合并为一个
// mask1 包含 layer1 和 layer2
var mask1 = CollisionMask.Layer1 | CollisionMask.Layer2;
// ^ 从遮罩中移除一个值
// mask2 包含除 layer3 之外的所有层
var mask2 = CollisionMask.Everything ^ CollisionMask.Layer3;
// ~ 反转一个遮罩
// mask3 包含不在 mask2 中的所有层(只有 layer3)
var mask3 = ~mask2;