创建一条射线,通常有两种方式
1、用坐标和方向创建
2、用摄像机获得鼠标位置创建
Ray r = new Ray(Vector3.right, Vector3.forward);
//Ray中的参数
print(r.origin);
print(r.direction);
//摄像机发射的射线
Ray r2 = Camera.main.ScreenPointToRay(Input.mousePosition);
如何检测碰撞到的物体——使用Physiscs.RayCast方法,参数传入一个射线,检测距离,检测层级,是否忽略碰撞器。但是这种方法只能得到碰撞,无法得到碰撞的物体信息。
使用Physiscs.Raycast的另一个重载可以得到碰撞物的信息,第一个参数射线,第二个传入一个RayCastHit的对象进行存储,这个对象不需要实例化。第三个参数是检测距离。第四个是检测层级。第五个是是否忽略触发器。
注意***********
传入RayCastHit需要在前面写上out
传入层级的时候是用1<<LayerMask.NameToLayer("string")
RaycastHit hitInfo;
if (Physics.Raycast(r3,out hitInfo,1000))
{
//碰撞器信息
print(hitInfo.collider.gameObject.name);
//碰撞点
print(hitInfo.point);
//法线信息
print(hitInfo.normal);
//碰撞到对象的位置信息
print(hitInfo.transform.position);
//碰撞对象的离自己的距离
print(hitInfo.distance);
}