
射线只是 Unity 中的一个数据结构,它表明射线的起点和行进的方向,那么原点是世界中光线将开始的位置,并采用向量 3 值,而方向属性采用归一化向量 3 形式的轨迹。
对向量进行归一化会将其大小的长度限制为 1,这对于表示一致的方向很有用。
有几种方法可以创建新的射线,我们可以手动创建射线:
// 从此对象创建一条射线,向前移动
Ray ray = new Ray(transform.position, transform.forward);
或许,也可以运用其中一个辅助函数自动创建射线,例如从相机视口中心开始的射线:
// 从视口中心创建射线
Ray ray = Camera.main.ViewportPointToRay(new Vector3 (0.5f, 0.5f, 0));
在上面的示例中,(0.5f, 0.5f, 0) 其中 0.5f 的值表示两个维度中视口的中间,当然我们也可以从屏幕上的鼠标位置生成射线:
// 从鼠标位置创建射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
这些辅助函数可以轻松地从世界现有点创建射线,但是,虽然可以缓存对创建的射线的引用,但仍然需要在每次使用它时对其进行更新。
因此,假如光线的原点和方向每帧都不同,那么也需要每帧更新光线:
Ray ray;
void Update()
{
ray = transform.position, transform.forward;
}
否则,当使用射线时,它不会处于正确的位置。