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