在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);}}
}