Unity提供了专门的API进行范围检测,包括立方体、球形、胶囊等等。
1、立方体
(1)API用法一:返回碰撞器
//参数一:立方体中心点
//参数二:立方体三边大小
//参数三:立方体角度
//参数四:检测指定层级(不填检测所有层)
//参数五:是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填使用UseGlobal
//返回值:在该范围内的触发器(得到了对象触发器就可以得到对象的所有信息)
Collider[] colliders = Physics.OverlapBox( Vector3.zero,
Vector3.one,
Quaternion.AngleAxis(45, Vector3.up),
1 << LayerMask.NameToLayer("UI") |1 << LayerMask.NameToLayer("Default"),
QueryTriggerInteraction.UseGlobal);
for (int i = 0; i < colliders.Length; i++)
{
print(colliders[i].gameObject.name);
}
(2)API用法二:返回碰撞器数量
传入一个碰撞器数组,直接将碰撞器传入数组中,不需要通过返回值得到
参数与用法一相同,但是第三个参数是碰撞器数组
Collider[] colliders;
if(Physics.OverlapBoxNonAlloc(Vector3.zero, Vector3.one, colliders) != 0)
{
print("有物体");
}
2、球形
(1)
用法与盒状相似,只是参数略有不同
//参数一:中心点
//参数二:球半径
//参数三:检测指定层级(不填检测所有层)
//参数四:是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填使用UseGlobal
//返回值:在该范围内的触发器(得到了对象触发器就可以得到对象的所有信息)
colliders = Physics.OverlapSphere(Vector3.zero, 5, 1 << LayerMask.NameToLayer("Default"));
(2)
球形检测也有返回int值的API
if( Physics.OverlapSphereNonAlloc(Vector3.zero, 5, colliders) != 0 )
{
}
3、胶囊体
(1)
//参数一:半圆一中心点
//参数二:半圆二中心点
//参数三:半圆半径
//参数四:检测指定层级(不填检测所有层)
//参数五:是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填使用UseGlobal
//返回值:在该范围内的触发器(得到了对象触发器就可以得到对象的所有信息)
colliders = Physics.OverlapCapsule(Vector3.zero, Vector3.up, 1);
(2)
if ( Physics.OverlapCapsuleNonAlloc(Vector3.zero, Vector3.up, 1, colliders ) != 0 )
{
}