public static float GetAngleBetweenChildAndParent(RigidNode child) { BHingedConstraint hinge = child.GetJoint <BHingedConstraint>(); if (hinge != null) { return(((HingeConstraint)hinge.GetConstraint()).HingeAngle); } RigidBody childRB = (RigidBody)child.MainObject.GetComponent <BRigidBody>().GetCollisionObject(); RigidBody parentRB = (RigidBody)((RigidNode)child.GetParent()).MainObject.GetComponent <BRigidBody>().GetCollisionObject(); Vector3 childUp = BulletSharp.Math.Quaternion.RotationMatrix(childRB.WorldTransform).ToUnity() * Vector3.up; Vector3 parentUp = BulletSharp.Math.Quaternion.RotationMatrix(parentRB.WorldTransform).ToUnity() * Vector3.up; return(MathfExt.ToDegrees(Mathf.Acos(Vector3.Dot(childUp, parentUp) / (childUp.magnitude * parentUp.magnitude)))); }