Exemplo n.º 1
0
        /// <summary>
        /// Computing variables making Quaternion.Look universal for different skeletonal setups
        /// </summary>
        private void ComputeBonesRotationsFixVariables()
        {
            if (BaseTransform != null)
            {
                Quaternion preRot = BaseTransform.rotation;
                BaseTransform.rotation = Quaternion.identity;

                FromAuto = LeadBone.rotation * -Vector3.forward;

                float      angl       = Quaternion.Angle(Quaternion.identity, LeadBone.rotation);
                Quaternion rotateAxis = (LeadBone.rotation * Quaternion.Inverse(Quaternion.FromToRotation(FromAuto, ModelForwardAxis)));

                OffsetAuto = Quaternion.AngleAxis(angl, rotateAxis.eulerAngles.normalized).eulerAngles;

                BaseTransform.rotation = preRot;

                parentalReferenceLookForward = Quaternion.Inverse(LeadBone.parent.rotation) * BaseTransform.rotation * ModelForwardAxis.normalized;
                parentalReferenceUp          = Quaternion.Inverse(LeadBone.parent.rotation) * BaseTransform.rotation * ModelUpAxis.normalized;

                headForward = Quaternion.FromToRotation(LeadBone.InverseTransformDirection(BaseTransform.TransformDirection(ModelForwardAxis.normalized)), Vector3.forward) * Vector3.forward;
            }
            else
            {
                Debug.LogWarning("Base Transform isn't defined, so we can't use auto correction!");
            }
        }
Exemplo n.º 2
0
        private void Gizmos_DrawBones()
        {
            if (LeadBone == null)
            {
                return;
            }

            Color c         = Handles.color;
            Color boneColor = new Color(0.075f, .85f, 0.3f, gizmosAlpha * 0.7f);

            Handles.color = boneColor;

            Vector3 f = BaseTransform.TransformDirection(ModelForwardAxis);

            if (LeadBone.childCount > 0)
            {
                FGUI_Handles.DrawBoneHandle(LeadBone.position, LeadBone.position + BaseTransform.TransformDirection(ModelUpAxis) * Vector3.Distance(LeadBone.position, LeadBone.parent.position) / 2f, f);
            }

            if (LookBones.Count > 0)
            {
                // Drawing back-bones
                for (int i = 1; i < LookBones.Count; i++)
                {
                    if (LookBones[i].Transform != null)
                    {
                        if (LookBones[i] == null)
                        {
                            continue;
                        }
                        FGUI_Handles.DrawBoneHandle(LookBones[i].Transform.position, LookBones[i - 1].Transform.position, f);
                    }
                }

                if (LookBones.Count > 1)
                {
                    FGUI_Handles.DrawBoneHandle(LookBones[1].Transform.position, LeadBone.position, f);
                }
            }

            Handles.SphereHandleCap(0, LeadBone.position, Quaternion.identity, _gizmosDist * 0.025f, EventType.Repaint);

            for (int i = 0; i < LeadBone.childCount; i++)
            {
                Handles.color = new Color(0.8f, .8f, 0.8f, gizmosAlpha * 0.25f);
                Handles.DrawDottedLine(LeadBone.position, LeadBone.GetChild(i).position, 2.5f);
                Handles.color = new Color(0.8f, .8f, 0.8f, gizmosAlpha * 0.1f);
                Handles.SphereHandleCap(0, LeadBone.GetChild(i).position, Quaternion.identity, _gizmosDist * 0.01f, EventType.Repaint);
            }

            if (LookBones.Count > 1)
            {
                if (LookBones[LookBones.Count - 1].Transform.parent)
                {
                    Handles.color = new Color(0.8f, .8f, 0.8f, gizmosAlpha * 0.25f);
                    Handles.DrawDottedLine(LookBones[LookBones.Count - 1].Transform.position, LookBones[LookBones.Count - 1].Transform.parent.position, 3f);
                    Handles.color = new Color(0.8f, .8f, 0.8f, gizmosAlpha * 0.1f);
                    Handles.SphereHandleCap(0, LookBones[LookBones.Count - 1].Transform.parent.position, Quaternion.identity, _gizmosDist * 0.01f, EventType.Repaint);
                }
            }

            Handles.color = c;
        }