How does InverseTransformPoint work? Unity C#
Solution 1
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;
}
Solution 2
Transforms position from world space to local space.
This means that given a Transform object, you will call from the transform to the method InverseTransformPoint with a Vector that represents a position in the world space, this function will return a local space position respect from the object who contains the function, in your case the "transform."
You could be calling it using a child for example:
Vector3 pos = transform.getChild(0).InverseTransformPoint(aWorldPosition);
This would generate the position in local space for the child 0.
Related videos on Youtube
RealAnyOne
Updated on June 04, 2022Comments
-
RealAnyOne almost 2 years
From Unity scripting API
Transforms position from world space to local space.
But I don't understand how it is doing that in the block below
private Vector3 PlaceOnCircle(Vector3 position) { Ray ray = Camera.main.ScreenPointToRay (position); Vector3 pos = ray.GetPoint (0f); // Making 'pos' local to... ? pos = transform.InverseTransformPoint (pos); float angle = Mathf.Atan2 (pos.x, pos.z) * Mathf.Rad2Deg; pos.x = circle.radius * Mathf.Sin (angle * Mathf.Deg2Rad); pos.z = circle.radius * Mathf.Cos (angle * Mathf.Deg2Rad); pos.y = 0f; return pos; }
Is it making 'pos' local to itself or local to the GameObject that has this script?
Why is the argument for the InverseTransformPoint the variable itself?
Wouldn't it be enought to write
pos = transform.InverseTransformPoint();
which would make 'pos' local to the mentioned transform?-
Pac0 about 6 yearsthe argument of the function is the point, supposedly in world space coordinates, from which you want to calculate the local coordinates (the result of the function). The transform on which you apply the function is the local frame of reference, from which the new x, y and z coordinates will be calculated. So in this case, it's replacing "pos" (world coordinates) by local coordinates relative to the current Game Object to which this script is attached.
-