unity中射線檢測時非常實用也經常實用的一種手段。下面講解一下射線檢測問題。
1)Ray
根據射線端點和射線的方向定義一條射線
Ray ray= new Ray(transform.position, transform.forward);
定義一個包含射線投射資訊的變量RaycastHit hit,并進行射線檢測Physics.SphereCast
RaycastHit hit;
if(Physics.SphereCast(ray,1f,out hit))
{
if(hit.distance<3f)
{
float angle = Random.Range(90, 110);
print(angle);
transform.Rotate(0, angle, 0);
}
}
通過結構體變量hit既可以擷取射線碰到物體後相關資料,如hit.Point(碰撞點坐标),hit.transform.gameObject(碰撞物體對象,進而可以擷取遊戲物體上的腳本元件,進而可以調用元件上的方法或者變量);
射線檢測時可以用Raycast也可以用SphereCast,具體用什麼類型的射線投射可以根據需求自己選擇
1)螢幕射線
螢幕射線為有camera發出的射線,從point點像錄影機方向發出射線
Ray ray = mainCamera.ScreenPointToRay(point);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
StartCoroutine(CreateOnShow(hit.point));
GameObject hitGobj = hit.transform.gameObject;
ReactTOHIt newReactor = hitGobj.GetComponent<ReactTOHIt>();
if(newReactor!=null)
{
newReactor.React();
}
}