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); }