Exemplo n.º 1
0
        public bool GetLocalAttachmentPositionAndRotation(Transform transformToAttachTo, out Vector3 attachPositionOffset, out Quaternion attachRotationOffset, string attachmentPointName = "", bool iterateAttachmentPoint = false)
        {
            if (attachmentPoints.Count == 0 || (attachmentPointName == "" && iterateAttachmentPoint == false))
            {
                attachPositionOffset = Vector3.zero;
                attachRotationOffset = Quaternion.identity;
                return(false);
            }

            AttachmentPoint ap = iterateAttachmentPoint ? attachmentPoints.Values.ElementAt(currentAttachmentPointIndex) : attachmentPoints.ContainsKey(attachmentPointName) ? attachmentPoints[attachmentPointName] : null;

            //if (ap) return Vector3.Scale(-ap.AttachEulerAnglesOffset, -ap.AttachPositionOffset);	That not work because of Gimbal Lock and Quaternion order we need to do Quaternion.Inverse (-eulerAngles not working)
            if (ap)
            {
                attachPositionOffset = ap.AttachPositionOffset;
                attachRotationOffset = ap.AttachRotationOffset;
                return(true);
            }

            attachPositionOffset = Vector3.zero;
            attachRotationOffset = Quaternion.identity;
            return(false);
        }