Table of Contents

物理查询

中级 程序员

物理查询(Physics Query) 是一组用于在给定模拟中测试和检索物理对象的操作。这些查询中最众所周知的形式是 RayCast(射线检测),它通过在场景中追踪一条不可见的直线来找到相交的可碰撞体。

Note

物理查询使用碰撞体形状来查找对象。它们会忽略没有附加可碰撞体组件或没有设置碰撞体形状的实体,参见可碰撞体。

查询类型

查询特定的碰撞层遮罩

可碰撞体被组织为层(layer),可用于在查询中过滤碰撞。

Body 组件上的 Collision 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;

本节内容