unity 教程Tanks中的Transform.InverseTransformPoint理解


Tanks教程中在處理攝像機縮放的時候使用了下面的函數,取兩個坦克的中心點之后,根據兩個坦克之間的距離,保證兩個坦克都在屏幕中,然后進行縮放。

 1  private float FindRequiredSize()
 2     {
 3         Vector3 desiredLocalPos = transform.InverseTransformPoint(m_DesiredPosition);
 4         float size = 0f;
 5         for (int i = 0; i < m_Targets.Length; i++)
 6         {
 7             if (!m_Targets[i].gameObject.activeSelf)
 8                 continue;
 9 
10             Vector3 targetLocalPos = transform.InverseTransformPoint(m_Targets[i].position);
11             Vector3 desiredPosToTarget = targetLocalPos - desiredLocalPos;
12             size = Mathf.Max (size, Mathf.Abs (desiredPosToTarget.y));
13 
14             size = Mathf.Max (size, Mathf.Abs (desiredPosToTarget.x) / m_Camera.aspect);
15         }
16         
17         size += m_ScreenEdgeBuffer;
18 
19         size = Mathf.Max(size, m_MinSize);
20         
21         return size;
22     }

一開始沒有明白InverseTransformPoint,這個函數變換位置從世界坐標到自身坐標。

結構如下:

 

 

 攝像機選擇的是正交投影,所以坦克到中心點CameraRig的x,y就是坦克距離屏幕中心點的位置。

因為camera的父節點CameraRig有個旋轉,所以計算到屏幕的中心點的坐標要考慮到旋轉,不如直接調用InverseTransformPoint,這樣得到tank相對CameraRig的坐標,就是到屏幕中心的坐標。而z軸對於我們的計算沒有用處。

 


免責聲明!

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



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