范围检测
🔎 Overlap 系列 API 对照表(3D Physics)
| API 名称 | 形状 | 方法签名 | 关键参数说明 |
|---|---|---|---|
Physics.OverlapBox |
盒状 | Collider[] OverlapBox(Vector3 center, Vector3 halfExtents, Quaternion orientation = Quaternion.identity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal) |
center:盒中心点(世界坐标)halfExtents:半尺寸 (x,y,z)orientation:旋转layerMask:层过滤queryTriggerInteraction:是否检测触发器 |
Physics.OverlapBoxNonAlloc |
盒状 | int OverlapBoxNonAlloc(Vector3 center, Vector3 halfExtents, Collider[] results, Quaternion orientation = Quaternion.identity, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal) |
与 OverlapBox 相同,但结果写入 results[],返回命中数量,无 GC |
Physics.OverlapSphere |
球形 | Collider[] OverlapSphere(Vector3 position, float radius, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal) |
position:球心radius:半径layerMask:层过滤queryTriggerInteraction:是否检测触发器 |
Physics.OverlapSphereNonAlloc |
球形 | int OverlapSphereNonAlloc(Vector3 position, float radius, Collider[] results, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal) |
与 OverlapSphere 相同,但结果写入 results[],返回命中数量,无 GC |
Physics.OverlapCapsule |
胶囊 | Collider[] OverlapCapsule(Vector3 point0, Vector3 point1, float radius, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal) |
point0:顶部球心point1:底部球心radius:半径layerMask:层过滤queryTriggerInteraction:是否检测触发器 |
Physics.OverlapCapsuleNonAlloc |
胶囊 | int OverlapCapsuleNonAlloc(Vector3 point0, Vector3 point1, float radius, Collider[] results, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal) |
与 OverlapCapsule 相同,但结果写入 results[],返回命中数量,无 GC |
一、范围检测是什么?
用于 瞬时伤害 / 范围判定 / 技能检测 的方法。
不会产生真实碰撞,仅在调用 API 的那一刻进行一次判断。
常见用途:
- 技能命中(地刺、AOE)
- 近战攻击范围
- 检查某区域是否有敌人
二、范围检测的前提
- 被检测对象必须带 Collider
三、三种主要检测形状
| 形状 | API |
|---|---|
| 盒状 Box | Physics.OverlapBox / OverlapBoxNonAlloc |
| 球形 Sphere | Physics.OverlapSphere / OverlapSphereNonAlloc |
| 胶囊 Capsule | Physics.OverlapCapsule / OverlapCapsuleNonAlloc |
四、layerMask(层)过滤
一个 int 表示 32 个层(0~31)。
通过左移使某一层对应为二进制位:
1 << LayerMask.NameToLayer("Enemy")
多个层可通过 | 组合:
1 << LayerMask.NameToLayer("Enemy") | 1 << LayerMask.NameToLayer("Default")
范围检测会检测范围内是否存在该Layer层的GameObject
五、QueryTriggerInteraction
是否检测 触发器(isTrigger):
- UseGlobal:使用 Physics 设置
- Collide:检测触发器
- Ignore:忽略触发器
六、Overlap API 参数完整拆解(精简版)
1. OverlapBox(盒状检测)
Physics.OverlapBox(center, halfExtents, rotation, layerMask, queryTriggerInteraction);
| 参数 | 含义 |
|---|---|
| center | 盒中心点 |
| halfExtents | 边长 |
| rotation | 旋转(Quaternion) |
| layerMask | 要检测的层 |
| queryTriggerInteraction | 是否检测触发器 |
1.1 OverlapBoxNonAlloc
Physics.OverlapBoxNonAlloc(center, halfExtents, results, rotation, layerMask);
results[]由你提供,无 GC- 返回命中数量
2. OverlapSphere(球形检测)
Physics.OverlapSphere(center, radius, layerMask, queryTriggerInteraction);
| 参数 | 含义 |
|---|---|
| center | 球心 |
| radius | 半径 |
2.1 OverlapSphereNonAlloc
同上,只是你提供数组。
3. OverlapCapsule(胶囊检测)
Physics.OverlapCapsule(point0, point1, radius, layerMask, queryTriggerInteraction);
| 参数 | 含义 |
|---|---|
| point0 | 顶部球体中心 |
| point1 | 底部球体中心 |
| radius | 半径 |
| 胶囊 = 两球体 + 中间圆柱。 |
3.1 OverlapCapsuleNonAlloc
同上,无 GC。

浙公网安备 33010602011771号