public override void OnAttach(XRHand emptyHand, Vector3 attachPositionWS, Quaternion attachRotationWS)
    {
        if (mounted)
        {
            _UnMount();
        }
        if (!hand)
        {
            hand = emptyHand;
            (joint, jointBias) = BuildJoint(body, emptyHand.bodyToAttach, jointSettings);
            attachedPositionLS = transform.InverseTransformPoint(attachPositionWS);
            attachedRotationLS = Quaternion.Inverse(transform.rotation) * attachRotationWS;
            ResetMovement();
            updateEvents.updateAttach.Invoke(emptyHand.playerRoot);
            _OnPickUp();
        }
        else
        {
            if (!hand2Enabled)
            {
                hand.TransforAttached(emptyHand);

                hand = emptyHand;
                (joint, jointBias) = BuildJoint(body, emptyHand.bodyToAttach, jointSettings);
                attachedPositionLS = transform.InverseTransformPoint(attachPositionWS);
                attachedRotationLS = Quaternion.Inverse(transform.rotation) * attachRotationWS;

                //TODO Test Logic
            }
            else
            {
                if (hand2)
                {
                    hand2.DetachIfAny();
                }

                hand2 = emptyHand;
                (joint2, jointBias2) = BuildJoint(body, emptyHand.bodyToAttach, jointSettings);
                attached2PositionLS  = transform.InverseTransformPoint(attachPositionWS);
                attached2RotationLS  = Quaternion.Inverse(transform.rotation) * attachRotationWS;
            }
        }
    }