其他分享
首页 > 其他分享> > Unity:Ray 射线

Unity:Ray 射线

作者:互联网

1.创建一条射线,从自己出发,发射向目标

Ray ray = new Ray(transform.position, target.position - transform.position);

第一个参数是射线的起点ray.origin,第二个参数是射线的方向 ray.direction

 

2.绘制出射线,方便调试(在Scene视角能看见,Game视角看不见)

Debug.DrawRay(ray.origin, ray.direction * 100, Color.red);

第一个参数是射线起点,第二个参数是射线方向*长度,第三个参数是射线颜色,[第四个参数是float型,表示显示时长]

 

3.射线的碰撞检测

 1 RaycastHit hit;
 2 if(Physics.Raycast(ray,out hit,10000,LayerMask.NameToLayer("Ground")))  //写出LayerMask参数表示只检测这一层的碰撞,其他层忽略
 3 //10000是射线的长度(如果不够长可能方向对了,但是长度不够碰撞不到,也可用Mathf.Infinity表示无限长)
 4 //RaycastHit hit保存了碰撞信息
 5 {
 6     if (hit.transform.CompareTag("Ground"))  //判断碰撞物是不是地面
 7     {
 8         Debug.log(hit.point);  //输出碰撞点的坐标
 9     }
10 }        

 

4.案例1 用射线写一个人物移动脚本,鼠标点击哪,人物就往哪移动

 1 if (Input.GetMouseButtonDown(0))
 2 {   //判断点击的是否是地面,如果是得到点的位置
 3     ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 4     RaycastHit hit;
 5     if(Physics.Raycast(ray,out hit,10000,LayerMask.NameToLayer("Ground")))
 6     {
 7          if (hit.transform.CompareTag("Ground"))
 8         {
 9              isGround = true;
10              targetPos = hit.point;
11          }
12     }
13             //如果点击的是地面,就移动。如果已经到点了(距离小于一个很小的数),就不动.
14             if (isGround && Vector3.Distance(transform.position,targetPos)>0.5f )
15             { 
16                     transform.LookAt(new Vector3(targetPos.x, transform.position.y, targetPos.z));
17                     transform.Translate(Vector3.forward * Time.deltaTime * speed);           
18             } 
19         }        
View Code

 

标签:hit,transform,射线,Unity,参数,position,Ray,ray
来源: https://www.cnblogs.com/tomatokely/p/15334095.html