關於Unity3d的世界空間和本地空間的一點思考

最近纔開始學Unity3d,被這個本地空間和世界空間搞得有點暈頭轉向的。因而花了一點時間隨便寫了一點代碼加深理解。代碼以下:spa

 1 public class MoveX : MonoBehaviour
 2 {
 3     void Update()
 4     {
 5         if (Input.GetMouseButtonDown(0))
 6         {
 7             var two = new Vector3(2, 2, 2);
 8             var localSpace = transform.InverseTransformPoint(two);
 9             var worldSpace = transform.TransformPoint(localSpace);
10             log(localSpace);
11             Debug.Log("-----空間分割線------");
12             log(worldSpace);
13         }
14     }
15 
16     void log(Vector3 v)
17     {
18         Debug.Log(string.Format("x={0} y={1},z={2}", v.x, v.y, v.z));
19     }
20 }

在unity3d Editor中,咱們建立一個cube的GameObject,它的座標是(3,3,3),而後MoveX腳本賦給此cube。3d

首先我建立了一個三維座標都是2的點,而後把它傳給了transform.InverseTransformPoint(two),經過打印localSpace座標點咱們能夠看到的信息爲:x=-1 y=-1,z=-1,從這咱們能夠看出InverseTransformPoint的意思是:將transform的座標做爲原點(即世界空間的(3,3,3)),計算two座標(即世界空間的(2,2,2))相對於transform原點的座標。以下圖所示:code

接下來我將上面計算出來的相對於transform的座標的localSpace賦給了transform.TransformPoint(localSpace),而後計算獲得一個worldSpace座標,經過打印worldSpace座標點咱們能夠看到的信息爲:x=2 y=2,z=2。恰好還原獲得咱們原來two座標點。orm

相關文章
相關標籤/搜索