zoukankan      html  css  js  c++  java
  • 关于Unity3d的世界空间和本地空间的一点思考

    最近才开始学Unity3d,被这个本地空间和世界空间搞得有点晕头转向的。于是花了一点时间随便写了一点代码加深理解。代码如下:

     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。

    首先我创建了一个三维坐标都是2的点,然后把它传给了transform.InverseTransformPoint(two),通过打印localSpace坐标点我们可以看到的信息为:x=-1 y=-1,z=-1,从这我们可以看出InverseTransformPoint的意思是:将transform的坐标作为原点(即世界空间的(3,3,3)),计算two坐标(即世界空间的(2,2,2))相对于transform原点的坐标。如下图所示:

    接下来我将上面计算出来的相对于transform的坐标的localSpace赋给了transform.TransformPoint(localSpace),然后计算得到一个worldSpace坐标,通过打印worldSpace坐标点我们可以看到的信息为:x=2 y=2,z=2。刚好还原得到我们原来two坐标点。

  • 相关阅读:
    get函数理解
    get函数理解
    Absolute C++ 第9章字符串 编程练习4
    Absolute C++ 第9章字符串 编程练习4
    Absolute C++ 第9章字符串 编程练习4
    Absolute C++ 第9章字符串 编程练习4
    C字符串使用陷阱 “=”和“==” 学习笔记
    [Android]ListView中分割线的设置
    如何在adapter 中调用activity的方法
    Android开发中Handler的经典总结
  • 原文地址:https://www.cnblogs.com/koeltp/p/9716180.html
Copyright © 2011-2022 走看看