一、Physics.Raycast方法参数介绍
射线检测:从某个初始点开始,沿着特定的方向发射一条不可见且无限长的射线,通过此射线检测是否有任何模型添加了Collider碰撞器组件。一旦检测到碰撞,停止射线继续发射。
该方法高达16个重载,想一一了解可移步unity官方使用手册查看介绍
Physics-Raycast - Unity 脚本 API
二、摄像机射线和枪口射线实例演示
摄像机射线:
从摄像机处发射射线,检测到物体后绘制处摄像机到检测点的路径 显示准星位置
代码如下:
public RectTransform UI; //UI显示准星
private Ray ray;
private RaycastHit hit;
public LayerMask mask;
void Update()
{
//从摄像机处发射射线 形成射线
//ray=Camera.main.ScreenPointToRay(Input.mousePosition);
//if (Physics.Raycast(ray, out hit,100,mask))
//{
// UI.gameObject.SetActive(true);
// UI.position=Input.mousePosition;
// Debug.DrawLine(transform.position, transform.forward,Color.red);
//}
//else
//{
// UI.gameObject.SetActive(false);
//}
}
枪口射线:
从枪口处发射射线,若碰到物体,显示从枪口到碰撞物体检测点的路径,显示准星位置
代码如下:
public RectTransform UI; //UI显示准星
private Ray ray;
private RaycastHit hit;
public LayerMask mask;
public Transform gunPos; //枪口位置
void Update()
{
//枪口形成射线 准星效果
//起始位置 方向
if (Physics.Raycast(gunPos.position,gunPos.forward,out hit,100,mask.value))
{
//将检测点位置转换为屏幕坐标 以便保证准星位置
Vector3 UIposition= Camera.main.WorldToScreenPoint(hit.point);
UI.position = UIposition;
UI.gameObject.SetActive(true);
Debug.DrawLine(gunPos.position, hit.point,Color.red);
}
else
{
UI.gameObject.SetActive(false) ;
}
}