Exemplo n.º 1
0
        static public void ProcessVector3Modifications(IAnimationRecordingState state, ref System.Collections.Generic.Dictionary <object, Vector3Modification> vector3Modifications)
        {
            AnimationClip clip = state.activeAnimationClip;
            GameObject    root = state.activeRootGameObject;

            foreach (KeyValuePair <object, Vector3Modification> item in vector3Modifications)
            {
                Vector3Modification m      = item.Value;
                Transform           target = item.Key as Transform;

                if (target == null)
                {
                    continue;
                }

                EditorCurveBinding binding = new EditorCurveBinding();
                Type type = AnimationUtility.PropertyModificationToEditorCurveBinding(m.last.currentValue, state.activeRootGameObject, out binding);
                if (type == null)
                {
                    continue;
                }

                ProcessVector3Modification(state, binding, m.x, target, "x");
                ProcessVector3Modification(state, binding, m.y, target, "y");
                ProcessVector3Modification(state, binding, m.z, target, "z");
            }
        }
Exemplo n.º 2
0
        static private void CollectVector3Modifications(IAnimationRecordingState state, ref UndoPropertyModification[] modifications,
                                                        ref System.Collections.Generic.Dictionary <object, Vector3Modification> vector3Modifications, string propertyName)
        {
            List <UndoPropertyModification> outModifs = new List <UndoPropertyModification>();

            foreach (var modification in modifications)
            {
                PropertyModification prop = modification.previousValue;
                if (!(prop.target is Transform))
                {
                    outModifs.Add(modification);
                    continue;
                }

                EditorCurveBinding binding = new EditorCurveBinding();
                AnimationUtility.PropertyModificationToEditorCurveBinding(prop, state.activeRootGameObject, out binding);
                if (binding.propertyName.StartsWith(propertyName))
                {
                    Vector3Modification vector3Modification;

                    if (!vector3Modifications.TryGetValue(prop.target, out vector3Modification))
                    {
                        vector3Modification = new Vector3Modification();
                        vector3Modifications[prop.target] = vector3Modification;
                    }

                    if (binding.propertyName.EndsWith("x"))
                    {
                        vector3Modification.x = modification;
                    }
                    else if (binding.propertyName.EndsWith("y"))
                    {
                        vector3Modification.y = modification;
                    }
                    else if (binding.propertyName.EndsWith("z"))
                    {
                        vector3Modification.z = modification;
                    }

                    vector3Modification.last = modification;
                }
                else
                {
                    outModifs.Add(modification);
                }
            }

            if (vector3Modifications.Count > 0)
            {
                modifications = outModifs.ToArray();
            }
        }
Exemplo n.º 3
0
        private void button1_Click(object sender, System.EventArgs e)
        {
            Vector3Modification[] pm;
            pm = new Vector3Modification[2];
            ColorModification[] cm;
            cm = new ColorModification[2];

            cm[0] = new ColorModification(0, Color.Brown.ToArgb());
            cm[1] = new ColorModification(3, Color.Cyan.ToArgb());

            pm[0] = new Vector3Modification(1, new Vector3(-1, 2, 2));
            pm[1] = new Vector3Modification(0, new Vector3(3, 2, 2));



            UVMapPlaneXY uvM;

            uvM = new UVMapPlaneXY(new PointF(0, 0), new SizeF(5, 5), new SizeF(1, 1));


            this.g.ResetVertices(uvM);

            //this.g.ResetVertices(pm,cm,null,null);
        }
Exemplo n.º 4
0
        static private void ProcessAnimatorModifications(IAnimationRecordingState state,
                                                         ref System.Collections.Generic.Dictionary <object, Vector3Modification> positionModifications,
                                                         ref System.Collections.Generic.Dictionary <object, RotationModification> rotationModifications,
                                                         ref System.Collections.Generic.Dictionary <object, Vector3Modification> scaleModifications)
        {
            System.Collections.Generic.Dictionary <object, RootMotionModification> rootMotionModifications = new Dictionary <object, RootMotionModification>();

            AnimationClip clip     = state.activeAnimationClip;
            GameObject    root     = state.activeRootGameObject;
            Animator      animator = root.GetComponent <Animator>();

            bool isHuman         = animator != null ? animator.isHuman : false;
            bool hasRootMotion   = animator != null ? animator.hasRootMotion : false;
            bool applyRootMotion = animator != null ? animator.applyRootMotion : false;

            // process animator positions
            List <object> discardListPos = new List <object>();

            foreach (KeyValuePair <object, Vector3Modification> item in positionModifications)
            {
                Vector3Modification m      = item.Value;
                Transform           target = item.Key as Transform;

                if (target == null)
                {
                    continue;
                }

                EditorCurveBinding binding = new EditorCurveBinding();
                Type type = AnimationUtility.PropertyModificationToEditorCurveBinding(m.last.currentValue, state.activeRootGameObject, out binding);
                if (type == null)
                {
                    continue;
                }

                bool isRootTransform = root.transform == target;
                bool isRootMotion    = (isHuman || hasRootMotion || applyRootMotion) && isRootTransform;
                bool isHumanBone     = isHuman && !isRootTransform && animator.IsBoneTransform(target);

                if (isHumanBone)
                {
                    Debug.LogWarning("Keyframing translation on humanoid rig is not supported!", target as Transform);
                    discardListPos.Add(item.Key);
                }
                else if (isRootMotion)
                {
                    RootMotionModification rootMotionModification;

                    if (!rootMotionModifications.TryGetValue(target, out rootMotionModification))
                    {
                        rootMotionModification          = new RootMotionModification();
                        rootMotionModifications[target] = rootMotionModification;
                    }

                    rootMotionModification.lastP = m.last;
                    rootMotionModification.px    = m.x;
                    rootMotionModification.py    = m.y;
                    rootMotionModification.pz    = m.z;

                    discardListPos.Add(item.Key);
                }
            }

            foreach (object key in discardListPos)
            {
                positionModifications.Remove(key);
            }

            // process animator rotation
            List <object> discardListRot = new List <object>();

            foreach (KeyValuePair <object, RotationModification> item in rotationModifications)
            {
                RotationModification m      = item.Value;
                Transform            target = item.Key as Transform;

                if (target == null)
                {
                    continue;
                }

                EditorCurveBinding binding = new EditorCurveBinding();
                Type type = AnimationUtility.PropertyModificationToEditorCurveBinding(m.lastQuatModification.currentValue, state.activeRootGameObject, out binding);
                if (type == null)
                {
                    continue;
                }

                bool isRootTransform = root.transform == target;
                bool isRootMotion    = (isHuman || hasRootMotion || applyRootMotion) && isRootTransform;
                bool isHumanBone     = isHuman && !isRootTransform && animator.IsBoneTransform(target);

                if (isHumanBone)
                {
                    Debug.LogWarning("Keyframing rotation on humanoid rig is not supported!", target as Transform);
                    discardListRot.Add(item.Key);
                }
                else if (isRootMotion)
                {
                    RootMotionModification rootMotionModification;

                    if (!rootMotionModifications.TryGetValue(target, out rootMotionModification))
                    {
                        rootMotionModification          = new RootMotionModification();
                        rootMotionModifications[target] = rootMotionModification;
                    }

                    rootMotionModification.lastR = m.lastQuatModification;
                    rootMotionModification.rx    = m.x;
                    rootMotionModification.ry    = m.y;
                    rootMotionModification.rz    = m.z;
                    rootMotionModification.rw    = m.w;

                    discardListRot.Add(item.Key);
                }
            }

            foreach (object key in discardListRot)
            {
                rotationModifications.Remove(key);
            }

            // process animator scales
            List <object> discardListScale = new List <object>();

            foreach (KeyValuePair <object, Vector3Modification> item in scaleModifications)
            {
                Vector3Modification m      = item.Value;
                Transform           target = item.Key as Transform;

                if (target == null)
                {
                    continue;
                }

                EditorCurveBinding binding = new EditorCurveBinding();
                Type type = AnimationUtility.PropertyModificationToEditorCurveBinding(m.last.currentValue, state.activeRootGameObject, out binding);
                if (type == null)
                {
                    continue;
                }

                bool isRootTransform = root.transform == target;
                bool isHumanBone     = isHuman && !isRootTransform && animator.IsBoneTransform(target);
                if (isHumanBone)
                {
                    Debug.LogWarning("Keyframing scale on humanoid rig is not supported!", target as Transform);
                    discardListScale.Add(item.Key);
                }
            }

            foreach (object key in discardListScale)
            {
                scaleModifications.Remove(key);
            }

            ProcessRootMotionModifications(state, ref rootMotionModifications);
        }