Esempio n. 1
0
    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))));
    }