一个射线是一条从原点(origin)向指定方向(direction)无限延长的直线,在射线发射的轨迹中,可以用于检测所碰撞到的其他物体。
射线可以应用在多方面,例如射击游戏中的子弹、Dota类游戏的人物角色控制、移动VR的交互功能等等
Ray是一个结构体(Struct),下面将对Ray射线类相关的方法和属性进行讲解。
1.构造函数
public Ray(Vector3 origin, Vector3 direction);
参数介绍:origin:射线起点;direction:射线终点;
一般是采用从摄像机发出射线的方式创建一条射线,如从摄像机发射一条穿过屏幕中心的射线:
Ray ray = Camera.main.ScreenPointToRay(new Vector2(Screen.width / 2, Screen.height / 2));
2.发射射线
Physics.Raycast(),API文档中给出这几个方法:
public static bool Raycast(Ray ray, RaycastHit hitInfo, float distance, int layerMask);
public static bool Raycast(Ray ray, float distance, int layerMask);
public static bool Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask);
public static bool Raycast(Vector3 origin, Vector3 direction, RaycastHit , float distance ,int layerMask );
参数 说明
ray 要发射的射线
hitInfo 返回射线路径中碰撞体的信息
distance 射线发射的距离
layerMask 射线碰撞检测的层
3.layerMask参数
int型的变量,用于区分不同层的游戏对象,可以通过以下方法返回Layers对应的整数:
targetMask = LayerMask.GetMask("cube");
4.RaycastHit类
通过transform参数,就可以控制碰撞体的移动、旋转、伸缩比例,还可以获得碰撞体游戏对象,如:hit.transform.gameObject。
获得游戏对象实例,就可以获得具体碰撞体游戏对象的名称:hit.transform.gameObject.name。
5.例子
从摄像机发射一条穿过鼠标在屏幕位置的射线,当“cube”层的游戏对象碰撞到射线,对碰撞体进行平移:
热点新闻