Unity3d中的射线检测方法

来源:互联网 发布:寻龙诀 知乎 编辑:程序博客网 时间:2024/06/05 00:17

Ray

一般来讲常用的检测点击物体、是否穿过物体大多会用到发射射线来进行辅助测试,在U3D中射线Ray为只有起点和方向的结构体,例如从主摄像机发射一条射线到鼠标点击地点:Camera.main.ScreenPointToRay(实际是将点转为射线),当需要检测是否遇到物体时则需要RayCast方法进行测试。

RayCast

用到RayCast的地方无非两种

1.Physics.RayCast()——作用于所有物体,检测是否遇到该物体
2.Collider.RayCast()——检测Ray是否穿过该Collider

函数相关信息(Ray   RayCastHit   float)

两种函数很显然是返回bool类型,参数方面:既然是射线是否遇到物体,所以检测物体是必须的,即Ray参数,既然可用Ray参数亦可使用Ray的相关属性:起点(transform.postion)和方向(Vector3.down),这里射线亦可指定最大距离即可以加入一个float型的最大距离值,如果接触物体时很多时候我没是不是需要获取这个接触物的信息呢?因此引入RayCastHit的结构体用于记录相关信息,因为是结构体,所以需要借助Out字符来进行存储。

RayCastHit

RayCastHit用于记录从RayCast函数中获取的信息,本身为Struct类型。

相关信息

point: Vector3     碰撞位置的世界坐标
normal: Vector3    碰撞的面在碰撞位置的法线
barycentricCoordinate: Vector3  碰撞位置的三角形重心坐标。 具体应用案例大家自己查文档吧,虽然这么说很不负责,但是我实在不知道这个有啥用。
distance:float   碰撞位置跟起始点的距离
triangleIndex:int  碰撞到的位置的三角多边形的号码,我也从来没用过这个,回头有空给大家实验下利用这个功能都能干吗。
textureCoord: Vector2    碰撞位置的uv坐标位置
textureCoord2: Vector2   碰撞位置的第二套uv坐标位置
collider:Collider    碰撞到的碰撞体
rigidbody: Rigidbody    碰撞到的物体的刚体
transform: Transform   碰撞到的物体的Transform节点

原创粉丝点击