在Unity中,射线检测通常用于碰撞检测,比如:在游戏中,开枪射击时,需要判断击中的物体、子弹击中的位置;用鼠标来控制物体的移动;用鼠标拾取某个物体。
射线,顾名思义,在数学中射线是指由线段的一端无限延长所形成的直的线,射线仅有一个端点,无法测量长度(它无限长)。在Unity中,射线检测,就是从一个固定的点,沿着一个特定的方向,发射一条射线,当和物体发生碰撞后,返回碰撞信息。
当使用Unity进行射线检测时,可以通过以下步骤实现:
- 创建一个GameObject对象作为射线的起点。
- 使用Camera.main.ScreenPointToRay方法将屏幕坐标转换为射线。
- 调用Physics.Raycast方法进行射线检测,并获取碰撞点的信息。
- 根据碰撞点的信息执行相应的操作,例如改变物体的位置或颜色
被点击物体必须有碰撞组件
using UnityEngine;
public class PlaneRayExample : MonoBehaviour
{
void Start()
{
}
void Update()
{
//按下鼠标发射射线
if (Input.GetMouseButton(0))
{
//获取射线方式1 从000点射向上面
//Ray ray = new Ray(Vector3.zero,Vector3.up);
//方式2 从摄像机获取,Input.mousePosition是鼠标点击的点;摄像机射向物体上的点
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//声明一个碰撞信息类
RaycastHit hit;
//Raycast碰撞检测
bool res = Physics.Raycast(ray,out hit);
if (res )
{
Debug.Log(hit.point);
transform.position = hit.point,
}
//多检测
//RaycastHit! hits = Physics.RaycastAll(ray, 100, 1<<10);
}
}
}