Unity 提供了射线功能。
new Ray(transform.position,transform.forward);
新建一条射线,确定射线的起始位置,以及射线的方向。
Physics.Raycast,发射射线,可以设置射线的长度等,射线的重要方法,这个参数种类有很多。
先用三个参数的。
第一个参数代表:新建的射线,第二个参数代表:射线的碰撞体(注这个参数要带 out)。第三个参数代表射线的距离。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RayTest : MonoBehaviour
{
// Start is called before the first frame update
private RaycastHit raytest;
void Start()
{
Ray a = new Ray(transform.position,transform.forward);
if(Physics.Raycast(a,out raytest,200)){
Debug.Log(raytest.point);
Debug.Log(raytest.transform.name);
}
}
}
再用一个四个参数的。
前三个参数同上,第四个参数:代表筛选层级,就是射线碰撞到哪些物体才会有反应。
上图中我们让小球去照射胶囊体,首先我们被射线射中的物体的层级(也就是胶囊体的层级)设置为 test,下面有两种方式可以获取层级。
1、int b = LayerMask.GetMask("test","test1");
2、int c = (1 << 9) | (1 << 10);
也就是2的9次方|
2的10次方,所得的值等于:2的9次方+2的10次方=1536
b 与 c 的值是相等的。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RayTest : MonoBehaviour
{
// Start is called before the first frame update
private RaycastHit raytest;
void Start()
{
Ray a = new Ray(transform.position,transform.forward);
int b = LayerMask.GetMask("test","test1");
int c = (1 << 9) | (1 << 10);
Debug.Log("b::::::::"+b+",,,,,c::::::"+c);
if(Physics.Raycast(a,out raytest,200,b)){
Debug.Log(raytest.transform.name);
}
}
}