public class L14 : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
//范围检测 - 游戏中瞬时的攻击范围判断一般会使用范围检测
//比如玩家攻击使前方1米圆形范围内对象都受到伤害
//这种没有实体物体,只想要检测在某一指定范围内的对象,对对象进行一定的逻辑处理
//如何进行范围检测
//想要被范围检测到的对象必须有碰撞器,不用有刚体
//范围检测相关的API只有执行该句代码时进行一次范围检测,是瞬时的
//范围检测相关API并不会真正产生一个碰撞器,只是碰撞判断计算而已
//范围检测API
//盒状范围检测
//参数一 立方体中心点
//参数二 立方体三边大小的一半
//参数三 立方体角度
//参数四 检测指定层级(不填检测所有层)
//参数五 是否忽略触发器 UseGlobal-使用全局设置 Collide-检测触发器 Ignore-忽略触发器 不填则为UseGlobal
//返回值 在该范围内的触发器(得到了对象触发器就可以得到对象的所有信息)
Collider[] colliders = Physics.OverlapBox(Vector3.zero, new Vector3(1, 2, 3), Quaternion.AngleAxis(45, Vector3.up),
1 << LayerMask.NameToLayer("UI")|
1 << LayerMask.NameToLayer("Default"),
QueryTriggerInteraction.UseGlobal);
//关于层级
//通过名字得到层级编号 LayerMask.NameToLayer
//我们需要通过编号左移构建二进制数
//每一个编号的层级其实都是一个对应为1的2进制数
//我们可以通过位运算就可以选择想要检测的层级
//Physics.OverlapBoxNonAlloc()
//返回值:碰撞到的碰撞器数量
//参数中需要传入一个数组进行存储
Physics.OverlapBoxNonAlloc(Vector3.zero,Vector3.one,colliders);
//球形范围检测
//参数一 中心点
//参数二 球半径
//参数三 指定层级
//参数四 是否忽略触发器
//返回值是该范围内的触发器
colliders = Physics.OverlapSphere(Vector3.zero, 5,1<<LayerMask.NameToLayer("Default"));
//同上
//Physics.OverlapSphereNonAlloc()
//胶囊范围检测
//参数一 半圆一中心点
//参数二 半圆二中心点
//参数三 半圆半径
//参数四 指定层级
//参数五 是否忽略触发器
//返回值是该范围内的触发器
colliders = Physics.OverlapCapsule(Vector3.zero, Vector3.up, 1);
//同上
//Physics.OverlapCapsuleNonAlloc()
}
}