天天看點

unity射線檢測

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