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!

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.