camera.ScreenPointToRay(),camera.ScreenToWorldPoint()與Raycast()


  1. camera.ScreenPointToRay(Input.mousePosition),自camera.tranform.position起經過Input.mousePosition發射一條ray並返回ray
  2. camera.ScreenToWorldPoint(Input.mousePosition+new Vector3(0, 0, (xxx))),將屏幕坐標轉換為世界坐標,但必須賦z值,z值應為攝像機到該點所在平面的投影
  3. 不要忘記distance參數,使用layermask可能與distance混淆
  4.  1 Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);               
     2             RaycastHit hit;
     3 
     4             if (Physics.Raycast(ray,out hit,layermask))
     5             {
     6                 Vector3 dir = hit.point - Camera.main.transform.position;                   //dir為由攝像機指向攝像機到射線打到的點的向量
     7                 Vector3 forward = Camera.main.transform.forward;                            //指向攝像機正前方的單位向量
     8                 Debug.Log("Camera.main.ScreenToWorldPoint(Input.mousePosition) " 
     9                     + Camera.main.ScreenToWorldPoint(Input.mousePosition)
    10                     + new Vector3(0, 0, (Vector3.Dot(dir, forward))));                      //Vector3.Dot(dir, forward)為dir與forward的點乘,幾何意義為dir在forward上的投影
    11                 Debug.Log("hit.point " + hit.point);
    12             }
    View Code

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM