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