前言
需求要用到Physics.OverlapBox
来检测周围的物体。因为距离要求比较精确所以使用Gizmos.DrawWireCube
来绘制出范围,结果发现Physics.OverlapBox
的检测范围和绘制出的图形范围不符。
通过查询资料了解到OverlapBox
是一种来自 Nvidia PhysX 系统的方法。它的实际size为设置的两倍。(对比碰撞器或者DrawWireCube
)。
知道原理就很简单了,直接把绘制的size*2即可,代码如下:
public Vector3 size = new Vector3(2, 2.1f, 5.7f);
private void FixedUpdate()
{
Collider[] cols = Physics.OverlapBox(this.transform.position, size,LayerMask.NameToLayer("layername"));
Debug.Log(cols.Length);
}
#if UNITY_EDITOR
private void OnDrawGizmos()
{
Gizmos.DrawWireCube(this.transform.position, size * 2);
}
#endif
经过测试Physics.OverlapSphere
是可以直接使用Gizmos.DrawWireSphere
的,不需要把尺寸*2。