- 在指定位置进行 瞬时 范围判断,获取范围内的角色
- 被检测的对象有碰撞器
- 执行该ApI 进行一次范围检测 不产生碰撞器
- 盒状检测
Physics.OverlapBox()
参数一:立方体的中心点
参数二:长宽高
参数三:立方体角度
参数四:检测的层级 默认检测所有层 1<<LayerMask.NameToLayer(层的名称)
参数五: 使用全局设置UseGlobal 检测触发器Collide 忽略触发器Ignore 默认全局设置
全局设置位置:Project Settings->Physics->Queries Hit Triggers
返回值:数组 该范围内所有对象的触发器
Physics.OverlapBoxNonAlloc 参数类似
返回检测到的碰撞器数量 需要传入一个数组 - 球形
Physics.OverlapSphereNonAlloc
参数2:半径
其他参数类似 - 胶囊
Physics.OverlapCapsule
参数1:半圆一 中心点位置
参数2:半圆二 中心点位置
参数三:半圆半径
Physics.OverlapCapsuleNonAlloc - 层级LayerMask
LayerMask.NameToLayer(层的名称);// 1 通过层的名字获取层的编号
例如:LayerMask.NameToLayer(“UI”);//返回5
通过左移符号构建二进制数 1<<LayerMask.NameToLayer(“UI”);//1<<5 二进制 0010 0000 32
通过位运算 与和或运算 选择想要检测的层级信息
共有32层 0-31
Layer 0 1<<0 二进制 0000 0000 0000 0000 0000 0000 0000 0001 1
Layer 1 1<<1 二进制 0000 0000 0000 0000 0000 0000 0000 0010 2
Layer 2 1<<2 二进制 0000 0000 0000 0000 0000 0000 0000 0100 4
Layer 5 1<<5 二进制 0000 0000 0000 0000 0000 0000 0010 0000 32
1<<LayerMask.NameToLayer(“UI”) | 1<<LayerMask.NameToLayer(“Default”)//或运算 (有1则1)
0000 0000 0000 0000 0000 0000 0000 0001 = 1
0000 0000 0000 0000 0000 0000 0010 0000 = 32
=
0000 0000 0000 0000 0000 0000 0010 0001 = 33
检测的时候使用33的二进制 与其他层的二进制进行 与运算(同1为1) 结果不为零进行检测
例子1
0000 0000 0000 0000 0000 0000 0010 0001=33
0000 0000 0000 0000 0000 0000 0000 0001=1
=
0000 0000 0000 0000 0000 0000 0000 0001=1
例子2
0000 0000 0000 0000 0000 0000 0010 0001=33
0000 0000 0000 0000 0000 0000 0000 0010=2
=
0000 0000 0000 0000 0000 0000 0000 0000=0