最近才开始学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