public class L14 : MonoBehaviour
{// Start is called before the first frame updatevoid 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()}
}