You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity 2D 如何获取指定半径范围内特定层级的所有游戏对象

Unity 2D 范围层级对象检测实现说明

你当前使用的Physics2D.OverlapCircleAll接口已经是实现该需求的官方原生高效方案,该接口会直接返回圆心为transform.position、半径为viewRadius范围内、完全匹配targetMask指定层级的所有2D碰撞体数组,完全符合你的使用场景。

日常使用时注意以下几点即可避免异常:

  • 所有需要被检测的目标对象必须挂载2D碰撞体组件(包括BoxCollider2D、CircleCollider2D、CapsuleCollider2D等),无碰撞体的对象不会被物理接口检测到
  • 层级掩码targetMask赋值注意:如果是Inspector面板赋值直接选择对应X层级即可;如果是代码动态生成,需调用LayerMask.GetMask("你的X层级名称")生成合法掩码,不要直接传入层级的序号整数
  • 若需要过滤触发器类型的碰撞体,可补充参数指定触发器检测规则,示例代码如下:
// 忽略触发器的检测实现
Collider2D[] targetInViewRadius = Physics2D.OverlapCircleAll(transform.position, viewRadius, targetMask, -Mathf.Infinity, Mathf.Infinity, QueryTriggerInteraction.Ignore);
  • 从返回的碰撞体数组中获取对应游戏对象的方法如下:
foreach (Collider2D targetCollider in targetInViewRadius)
{
    GameObject targetGameObject = targetCollider.gameObject;
    // 此处补充你自己的业务逻辑
}
  • 如果该检测逻辑需要每帧高频调用,建议改用Physics2D.OverlapCircleNonAlloc接口,提前复用缓存数组,可以避免频繁分配内存产生的GC开销,性能表现更好。

内容的提问来源于stack exchange,提问作者LesmoTV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:54:00