Unity - Raycast 射线检测

本文简要分析了Unity中 射线检测 的基本原理及用法,包括:

Ray 射线
RaycastHit 光线投射碰撞信息
Raycast 光线投射
SphereCast 球体投射
OverlapSphere 相交球等
项目地址: Raycast - SouthBegonia

Ray 射线
含义:官方解释为一条无穷的线,开始于origin点,朝向direction方向(但是,根据项目验证来看其默认长度为单位向量,只有对direction进行乘以倍率,才可实现延长射线,而非无穷)
用法:
Ray ray = new Ray(transform.position,transform.forward)
Ray camerRay = Camera.main.ScreenPointToRay(Input.mousePosition)
RaycastHit 光线投射碰撞信息
含义:取得从Raycast函数中得到的碰撞信息(注意不是collider哈,是包含collider信息)
关键变量:point、collider、rigidbody、transform
检测方法 - 线型检测
Physics.Raycast 光线投射
功能:在已有一条射线(也可无)的基础上,使用射线(新建射线)进行一定距离内的定向检测。可修改射线长度,限制其检测的Layer层,并且可以得到射线检测到的碰撞信息。但仅能检测到 第一个被射线碰撞的物体 ,后面的物体无法被检测到
用法:
Raycast(transform.position, Vector.forward, distance, LayerMask.GetMask(“Enemy”))
Raycast(transform.position, Vector.forward, distance, out RaycastHitInformation ,LayerMask.GetMask(“Enemy”))
Raycast (MyRay, distance, LayerMash.GetMask(“Enemy”))
Raycast (MyRay, out RaycastHitInformation, distance, LayerMask.GetMask(“Enemy”))
适用场合:配合相机坐标转换实现各类交互
Physics.RaycastAll 所有光线投射
功能:机理用法大致同Raycast,当区别在于可检测射线路径上的 所有物体 ,返回检测信息的数组。其他带All后缀的方法也同理
用法:
RaycastHit[] hits = RaycastAll(Vector3.zero, Vector.forward, distance, LayerMask.GetMask(“Enemy”))
RaycastHit[] hits = RaycastAll(MyRay, distance, LayerMash.GetMask(“Enemy”))
适用场合:穿透性检测
Physics.Linecast 线段投射
功能:建立 某两点之间 的射线进行检测,返回bool类型
用法:
Linecast(startPos, endPos, LayerMask.GetMask(“Enemy”))
Linecast(startPos, endPos, out RaycastHit, LayerMask.GetMask(“Enemy”))
适用场合:特定地点局部距离射线检测
检测方法 - 体型检测
Physics.SphereCast 球体投射
功能:扩展检测范围为球形,返回bool类型。但是该投射用法需要万分小心,见下
用法:
SphereCast (originPos, radius, direction, out RaycastHit, distance, LayerMask.GetMask(“Enemy”))
SphereCast (Ray, radius, out RaycastHit, distance, LayerMask.GetMask(“Enemy”))
适用场合:检测目的地是否可抵达,从而判断可移动性
Physics.Boxcast 块体投射/ CapsuleCast 胶囊体投射
功能:同球体投射
用法:同球体投射
Physics.OverlapSphere 相交球
功能:同样检测球形,但与SphereCast存在较大区别
用法:
Collider[] hits = Physics.OverlapSphere(startPos, radius, LayerMask.GetMask(“Enemy”)) :以startPos为原点,创建半径为radius的球形,检测区域为整个球形包围体(实心),检测Enemy层上的物体,返回所有碰撞物体的collider而不是RaycastHit
适用场合:检测挂载物体球形范围内是否存在碰撞,常用方法
Physics.IgnoreCollision 忽略碰撞
IgnoreCollision (collider1, collider2, ignore)

转载于:http://www.googln.net/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值