射线
射线分为几种:
1.从屏幕发出
2.从起点发射到终点
public class RayTest : MonoBehaviour
{
//public Camera camera;
// Start is called before the first frame updat
void Start()
{
}
// Update is called once per frame
void Update()
{
//创建射线,提前给定射线的发射位置和方向
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//Ray ray = camera.ScreenPointToRay(Input.mousePosition);
//第三种创建方式
//Ray ray = new Ray(startPosition,endPosition);
//碰撞信息,用于接收碰撞到的物体是谁以及碰撞点的位置和信息
RaycastHit hit;//碰撞的信息
if (Physics.Raycast(ray, out hit))
{
//真正的发射射线的地方,需要指定发射哪一条射线,并传入一个Out参数,用于接收碰撞信息,返回值为true时表示碰到了物体
if (Input.GetMouseButtonDown(0))
{
Destroy(hit.collider.gameObject);
}
}
}
}
射线的击穿
- 第一种方式:
Physics.RaycastAll
(); - 获取到碰撞到的所有物体
//第二个参数表示射线射的距离
RaycastHit[] hits;
hits = Physics.RaycastAll(ray, 100);
2.第二种方式
添加一个层级
int layerMask = 1 << 9;
Physics.Raycast(ray, out hit, 100, layerMask);
射线关于防止UI
的穿透
方法一:
EventSystem.current.IsPointerOverGameObject() 如果当前鼠标在 ui 上返回true 否则返回false