射线
射线是3D世界中一个点向一个方向发射无终点的线。在unity3d中我们发射的射线一旦与其他的碰撞器发生碰撞,射线将停止发射。在游戏制作过程中我们可以通过判断射线是否发生了碰撞,并且可以判断射线和谁发生了碰撞。应用范围非常广泛,如射击类游戏中用它来判断是否射中目标。
Ray.origin:射线起点
Ray.direction:射线的方向
步骤:
1.创建一条射线的方法Ray (origin : Vector3, direction : Vector3)
2.Origin是射线的起点,dire我们要想在游戏中发射一条射线,必须要有两个元素,一个起始点,一个方向。
ction是射线的方向。
3.首先在场景中创建一个CUBE,创建一个c#文件,并输入如下代码:
void Update ()
{
//定义一条射线,起点为Vector3.zero终点为物体坐标
Ray ray=new Ray(Vector3.zero,transform.position);
//定义一个光线投射碰撞
RaycastHit hit;
//发射射线长度为100
Physics.Raycast(ray,out hit,100);
//在Scene中生成这条射线,起点为射线的起点,终点为射线与物体的碰撞点
Debug.DrawLine(ray.origin,hit.point);
}
Debug.DrawLine()方法只在Scene视图中才可以看到
下面我们通过一个实例来看一下怎么判断射线与游戏物体之间的碰撞,并如何获得碰撞后的信息。
首先在场景中创建一个地面,然后制作一个Prefab里面包含一个Cube。然后在场景中添加一盏灯光,把脚本放在摄像机上面。
场景制作完成,我们想完成的功能是当我们用鼠标点击地面,在我们点击地面的位置生成Prefab的实例,就像种豆子一样。
public Transform explosion;
void Update ()
{
//获取鼠标点击事件
if(Input.GetMouseButtonDown(0))
{
//定义一条射线
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
//如果射线发生碰撞
if(Physics.Raycast (ray, out hit, 100))
{
Transform theClonedExplosion; //实例化物体
//hit.point为碰撞点的坐标
theClonedExplosion =Instantiate(explosion, hit.point, transform.rotation)as Transform;
}
}
}
射线是3D世界中一个点向一个方向发射无终点的线。在unity3d中我们发射的射线一旦与其他的碰撞器发生碰撞,射线将停止发射。在游戏制作过程中我们可以通过判断射线是否发生了碰撞,并且可以判断射线和谁发生了碰撞。应用范围非常广泛,如射击类游戏中用它来判断是否射中目标。
Ray.origin:射线起点
Ray.direction:射线的方向
步骤:
1.创建一条射线的方法Ray (origin : Vector3, direction : Vector3)
2.Origin是射线的起点,dire我们要想在游戏中发射一条射线,必须要有两个元素,一个起始点,一个方向。
ction是射线的方向。
3.首先在场景中创建一个CUBE,创建一个c#文件,并输入如下代码:
void Update ()
{
//定义一条射线,起点为Vector3.zero终点为物体坐标
Ray ray=new Ray(Vector3.zero,transform.position);
//定义一个光线投射碰撞
RaycastHit hit;
//发射射线长度为100
Physics.Raycast(ray,out hit,100);
//在Scene中生成这条射线,起点为射线的起点,终点为射线与物体的碰撞点
Debug.DrawLine(ray.origin,hit.point);
}
Debug.DrawLine()方法只在Scene视图中才可以看到
下面我们通过一个实例来看一下怎么判断射线与游戏物体之间的碰撞,并如何获得碰撞后的信息。
首先在场景中创建一个地面,然后制作一个Prefab里面包含一个Cube。然后在场景中添加一盏灯光,把脚本放在摄像机上面。
场景制作完成,我们想完成的功能是当我们用鼠标点击地面,在我们点击地面的位置生成Prefab的实例,就像种豆子一样。
public Transform explosion;
void Update ()
{
//获取鼠标点击事件
if(Input.GetMouseButtonDown(0))
{
//定义一条射线
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
//如果射线发生碰撞
if(Physics.Raycast (ray, out hit, 100))
{
Transform theClonedExplosion; //实例化物体
//hit.point为碰撞点的坐标
theClonedExplosion =Instantiate(explosion, hit.point, transform.rotation)as Transform;
}
}
}
更多精彩关注:http://www.gopedu.com/