Unity之范围检测

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 )
{

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值