这是我参与8月更文挑战的第23天,活动详情查看:8月更文挑战
概念
射线是3D世界中一个点向一个方向发射的一条无终点的线,在发射轨迹中与其他物体发生碰撞时,它将停止发射 。
用途:射线应用范围比较广, 多用于碰撞检测(如:子弹飞行是否击中目标)、角色移动等 等。
有关射线(Ray)的几个结构体(类):
- Physics (物理类) :RayCast()用来发射一条射线;
- Ray (射线结构) :表示射线本身的对象
- RaycastHit (结构) :射线和其他碰撞器的碰撞信息
绘制射线函数
-
绘制从此物体出发方向为z轴正向长度为10的蓝色射线:
Debug.DrawLine(transform.position, Vector3.forward * 10,Color.blue); -
绘制从此物体出发方向为x轴负方向长度为10的红色射线
Debug.DrawRay(transform.position, Vector3.left * 10,Color.red);
参数解释:
- 第一个参数是绘制出来的位置
- 第二个参数是绘制出来的点,默认是1,可以乘一个float类型的数值来增加其射线长度
- 第三个参数是颜色
- 第四个参数是射线区域,如果改变了射线方向,则射线会形成一个区域,为float类型,值越大,停留的时间越长.
射线检测
射线检测的相关参数概念:
-
RaycastHit hit:光线投射碰撞(此变量用于存储此射线碰到了哪些物体的信息)
-
Camera.main.ScreenPointToRay(位置):屏幕位置发射线:返回一条射线从摄像机通过一个屏幕点
PS:
- 产生的射线是在世界空间中,从相机的近裁剪面开始并穿过屏幕position(x,y)像素坐标(position.z被忽略。
- 屏幕空间以像素定义。屏幕的左下为(0,0);右上是(pixelWidth,pixelHeight)。
相关API:
- Ray Camera.main.ScreenPointToRay(Vector3 pos) 返回一条射线Ray从摄像机到屏幕指定一个点
- Ray 射线类
- RaycastHit 光线投射碰撞信息
- bool Physics.Raycast注意:如果从一个球型体的内部到外部用光线投射,返回为假。
射线的5个参数
RaycastHit[] RaycastAll(Ray ray, float distance, int layerMask)
参数:
- origin : 在世界坐标中射线的起始点
- direction: 射线的方向
- distance: 射线的长度
- hit: 使用c#中out关键字传入一个空的碰撞信息类,然后碰撞后赋值。可以得到碰撞物体的transform,rigidbody,point等信息。
- layerMask: 只选定Layermask层内的碰撞器,其它层内碰撞器忽略。 选择性的碰撞过滤物体。