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!