Unity(第十九部)射线

时间:2024-03-01 15:28:19

在Unity中,射线检测通常用于碰撞检测,比如:在游戏中,开枪射击时,需要判断击中的物体、子弹击中的位置;用鼠标来控制物体的移动;用鼠标拾取某个物体。
射线,顾名思义,在数学中射线是指由线段的一端无限延长所形成的直的线,射线仅有一个端点,无法测量长度(它无限长)。在Unity中,射线检测,就是从一个固定的点,沿着一个特定的方向,发射一条射线,当和物体发生碰撞后,返回碰撞信息。

当使用Unity进行射线检测时,可以通过以下步骤实现:

  1. 创建一个GameObject对象作为射线的起点。
  2. 使用Camera.main.ScreenPointToRay方法将屏幕坐标转换为射线。
  3. 调用Physics.Raycast方法进行射线检测,并获取碰撞点的信息。
  4. 根据碰撞点的信息执行相应的操作,例如改变物体的位置或颜色

被点击物体必须有碰撞组件

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