public static UndoPropertyModification[] Process(IAnimationRecordingState state, UndoPropertyModification[] modifications) { GameObject activeRootGameObject = state.activeRootGameObject; UndoPropertyModification[] result; if (activeRootGameObject == null) { result = modifications; } else if (!AnimationRecording.HasAnyRecordableModifications(activeRootGameObject, modifications)) { result = modifications; } else { Dictionary <object, AnimationRecording.RotationModification> dictionary = new Dictionary <object, AnimationRecording.RotationModification>(); Dictionary <object, AnimationRecording.Vector3Modification> dictionary2 = new Dictionary <object, AnimationRecording.Vector3Modification>(); Dictionary <object, AnimationRecording.Vector3Modification> dictionary3 = new Dictionary <object, AnimationRecording.Vector3Modification>(); AnimationRecording.CollectRotationModifications(state, ref modifications, ref dictionary); UndoPropertyModification[] second = AnimationRecording.FilterRotationModifications(state, ref dictionary); UndoPropertyModification[] array = AnimationRecording.FilterModifications(state, ref modifications); AnimationRecording.CollectVector3Modifications(state, ref modifications, ref dictionary3, "m_LocalPosition"); AnimationRecording.CollectVector3Modifications(state, ref modifications, ref dictionary2, "m_LocalScale"); AnimationRecording.ProcessAnimatorModifications(state, ref dictionary3, ref dictionary, ref dictionary2); AnimationRecording.ProcessVector3Modifications(state, ref dictionary3); AnimationRecording.ProcessRotationModifications(state, ref dictionary); AnimationRecording.ProcessVector3Modifications(state, ref dictionary2); AnimationRecording.ProcessModifications(state, modifications); array.Concat(second); result = array.ToArray <UndoPropertyModification>(); } return(result); }
public static UndoPropertyModification[] ProcessModifications(IAnimationRecordingState state, UndoPropertyModification[] modifications) { AnimationClip activeAnimationClip = state.activeAnimationClip; GameObject activeRootGameObject = state.activeRootGameObject; Animator component = activeRootGameObject.GetComponent <Animator>(); UndoPropertyModification[] result = AnimationRecording.FilterModifications(state, ref modifications); int i = 0; while (i < modifications.Length) { EditorCurveBinding binding = default(EditorCurveBinding); PropertyModification previousValue = modifications[i].previousValue; Type type = AnimationUtility.PropertyModificationToEditorCurveBinding(previousValue, activeRootGameObject, out binding); if (type != null) { if (component != null && component.isHuman && binding.type == typeof(Transform) && component.gameObject.transform != previousValue.target && component.IsBoneTransform(previousValue.target as Transform)) { Debug.LogWarning("Keyframing for humanoid rig is not supported!", previousValue.target as Transform); } else { EditorCurveBinding[] array = RotationCurveInterpolation.RemapAnimationBindingForAddKey(binding, activeAnimationClip); if (array != null) { for (int j = 0; j < array.Length; j++) { PropertyModification propertyModification = AnimationRecording.FindPropertyModification(activeRootGameObject, modifications, array[j]); if (propertyModification == null) { propertyModification = AnimationRecording.CreateDummyPropertyModification(activeRootGameObject, previousValue, array[j]); } state.AddPropertyModification(array[j], propertyModification, modifications[i].keepPrefabOverride); AnimationRecording.AddKey(state, array[j], type, propertyModification); } } else { state.AddPropertyModification(binding, previousValue, modifications[i].keepPrefabOverride); AnimationRecording.AddKey(state, binding, type, previousValue); } } } IL_19A: i++; continue; goto IL_19A; } return(result); }