将世界空间的位置转换为本地空间。
但我不明白它是如何在下面的块中做到的
pos = transform.InverseTransformPoint();
对于拥有此脚本的GameObject来说,它是'pos'本地还是本地?
为什么InverseTransformPoint的参数本身就是变量?
是不是应该写{{1}}哪个会使'pos'成为所提到的变换的本地?
答案 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);
transform
:变换表示脚本所在的对象
附上。这是您要将世界空间转换为本地的参考点。它可以是场景中的任何对象。InverseTransformPoint
:根据第1步对象将世界空间位置转换为局部空间的神奇功能。pos
:您想要转换为局部空间的世界空间位置。但是哪个本地空间?您在步骤1中定义的那个。