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?
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;
}