- Home /
Converting world position to local position according to rotation
Hello everyone! I've struck a wall trying to wrack my brain on what's wrong, but rotational calculations, or geometry aren't my strong suit.
The short bit: rigidbody.worldCenterOfMass - transform.position returns Vector3 of (0.0, -0,4, 0.1) while... rigidbody.centerOfMass returns Vector3 of (0.0, -0.1, -0.4) This is because the object is rotated (-90, 0, 0) in euler angles.
For another example: rigidbody.worldCenterOfMass - transform.position returns (1.4, 0.0, -7.5) while... rigidbody.centerOfMass returns (1.4, 7.5, 0.0) and for an additional fun factor: transform.InverseTransformPoint(t.rigidbody.worldCenterOfMass) returns (0.4, 0.0, -2.4) This object is rotated (90, 0, 0) in euler angles.
If i zero the rotation on the objects, the above values, save for InverseTransformPoint return the same values. This isn't ideal because of the code's intended usage.
I need to know how to attain the same values as rigidbody.centerOfMass returns calculated from the rigidbody.worldCenterOfMass. This is because i want to make a movement handle that's capable of moving the center of mass of the rigidbody around easily in the editor, and at runtime.
While i can cope with a simple Vector3 value to update it, it just isn't the same usability, and i see no other way to draw the handle than this.
The only relevant code to show is these two lines:
if(t==null) t = (Buoyancy)target
Handles.PositionHandle(t.rigidbody.worldCenterOfMass, t.transform.rotation);
I need the second line to somehow return the same value that t.rigidbody.centerofmass would, so that i may modify it utilizing the handle.
Thanks in advance!
Answer by Nymisu · Feb 18, 2015 at 10:49 AM
Problem solved, somewhat.
Handles still do not work, but experimenting with vector3 did come to a resolution.
You must force a uniform scale, then the worldcenterofmass will become equal with the centerofmass with the following code:
transform.TransformPoint((rigidbody.centerOfMass/transform.localScale.x));
This isn't the best solution, and i'd absolutely love if someone could figure out how to properly implement handle to control the center of rigidbody at runtime.
Your answer
![](https://koobas.hobune.stream/wayback/20220613183544im_/https://answers.unity.com/themes/thub/images/avi.jpg)