- Home /
Finding difference between gameObject's x coordinate according to one object's transform
Okay, forgive the crude illustration, but it's the best way to demonstrate my problem:
The black boxes are gameObjects, and the red dots are their transform's origin. Likewise the arrows demonstrate their transform's current direction/rotation. I want to find the difference in their x position, according to the bottom left gameObject's transform(red axis). In world coordinates, this would be a number greater than zero, but In my case it should return close to zero, if you get what I'm saying.
Now I thought this would be very simple with transform.right like so:
var diffX = transform.position - other.transform.position;
diffX = Vector3.Scale(diffX ,transform.right);
I also tried:
var tempF = transform.position.x - other.transform.position.x;
var diffX = Vector3(tempF, 0 ,0);
diffX = transform .TransformDirection(diffX);
Neither one gives the correct result. Any ideas? This one is driving me bonkers.
I don't get what you want to do here. You said you are looking for the difference in the x-coordinate. Do you mean position? Do you want to know how far the left object has to be moved along it's x-axis to be x-axis-aligned with the other object in world space? Or do you want to change the size of left object to match that of right object?
Ah yes, sorry about that. If you look at the two objects x position in world coordinates, you would find that the right gameObject has a higher value since it is further to the right. But if you tilt your head according to the bottom-left gameObject's red axis, you'll see that they have basically the same x position. How can I programmatically find this during runtime? Sorry for not being clear!
Answer by duck · May 18, 2010 at 11:10 AM
You need to convert the target object's world position to a relative local position, in relation to the source object. You can do this with InverseTransformPoint.
For instance, attach this to object A (the bottom left object):
var localPosB = transform.InverseTransformPoint(objectB.transform.position);
This means that "localPosB" now contains a vector which represent's object B's position in coordinates relative to object A's orientation and position.
Then, you can get the difference in objectA's local X axis, by simply checking the x component of localPosB, eg:
var diffX = localPosB.x;
Hope this works for you!
Your answer
Follow this Question
Related Questions
Why are my player's positions not being set correctly? 1 Answer
How to rotate an object to face the direction it's going? 1 Answer
Aim Down Sights Positioning Problem 1 Answer
Transform angle to grid position 2 Answers
How do you get the vector3 of one object and assign that vector3 to another object? 1 Answer