InverseTransformPoint如何工作? Unity C#

时间:2018-04-24 10:32:19

标签: c# unity3d coordinates transform coordinate-systems

来自Unity scripting API

  

将世界空间的位置转换为本地空间。

但我不明白它是如何在下面的块中做到的

pos = transform.InverseTransformPoint();

对于拥有此脚本的GameObject来说,它是'pos'本地还是本地?

为什么InverseTransformPoint的参数本身就是变量?

是不是应该写{{1}}哪个会使'pos'成为所提到的变换的本地?

3 个答案:

答案 0 :(得分:2)

private Vector3 PlaceOnCircle(Vector3 position)
{
    // Cast a ray from the camera to the given screen point
    Ray ray = Camera.main.ScreenPointToRay (position);

    // Get the point in space '0' units from its origin (camera)
    // The point is defined in the **world space**
    Vector3 pos = ray.GetPoint (0f);

    // Define pos in the **local space** of the gameObject's transform
    // Now, pos can be expressed as :
    // pos = transform.right * x + transform.up * y + transform.forward * z
    // instead of
    // Vector3.right * x + Vector3.up * y + Vector3.forward * z
    // You can interpret this as follow:
    // pos is now a "child" of the transform. Its coordinates are the local coordinates according to the space defined by the transform
    pos = transform.InverseTransformPoint (pos);

    // ...

    return pos;
}

答案 1 :(得分:1)

  

将世界空间的位置转换为本地空间。

这意味着给定一个Transform对象,您将从变换调用方法InverseTransformPoint,并使用一个表示世界空间中位置的Vector,此函数将从包含该函数的对象返回一个局部空间位置,在你的情况下,"转换。"

您可以使用孩子调用它,例如:

Vector3 pos = transform.getChild(0).InverseTransformPoint(aWorldPosition);

这将在子节点0的本地空间中生成位置。

答案 2 :(得分:0)

如果您将将全球空间/世界空间位置转换为局部空间的神奇代码分解,那么这里的解释是:

transform.InverseTransformPoint (pos);
  1. transform:变换表示脚本所在的对象 附上。这是您要将世界空间转换为本地的参考点。它可以是场景中的任何对象。
  2. InverseTransformPoint:根据第1步对象将世界空间位置转换为局部空间的神奇功能。
  3. pos:您想要转换为局部空间的世界空间位置。但是哪个本地空间?您在步骤1中定义的那个。