范围检测

范围检测(Overlap)

一、范围检测是什么?

用于 瞬时伤害 / 范围判定 / 技能检测 的方法。
不会产生真实碰撞,仅在调用 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。

posted @ 2025-12-04 19:14  高山仰止666  阅读(0)  评论(0)    收藏  举报