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