微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐