public static void KeyProperties(GameObject go, WindowState state, IList <EditorCurveBinding> bindings) { var allKeyedProperties = new List <PropertyModification>(); var rotationPaths = new HashSet <string>(); for (var i = 0; i < bindings.Count; ++i) { // Skip the euler and key quaternion+hint if (CurveEditUtility.IsRotationKey(bindings[i])) { rotationPaths.Add(bindings[i].path); continue; } AnimationUtility.GetFloatValue(go, bindings[i], out var val); var compo = GetTargetFromEditorBinding(go, bindings[i]); allKeyedProperties.Add(new PropertyModification { target = compo, value = val.ToString(EditorGUI.kFloatFieldFormatString), propertyPath = bindings[i].propertyName }); } foreach (var path in rotationPaths) { foreach (var binding in GetRotationBindings(path)) { var compo = GetTargetFromEditorBinding(go, binding); var readBinding = binding; switch (binding.propertyName) { case kLocalEulerHint + ".x": readBinding = EditorCurveBinding.FloatCurve(path, typeof(Transform), kLocalRotation + ".x"); break; case kLocalEulerHint + ".y": readBinding = EditorCurveBinding.FloatCurve(path, typeof(Transform), kLocalRotation + ".y"); break; case kLocalEulerHint + ".z": readBinding = EditorCurveBinding.FloatCurve(path, typeof(Transform), kLocalRotation + ".z"); break; } AnimationUtility.GetFloatValue(go, readBinding, out var val); allKeyedProperties.Add(new PropertyModification { target = compo, value = val.ToString(EditorGUI.kFloatFieldFormatString), propertyPath = binding.propertyName }); } } AddKey(allKeyedProperties, state); state.Refresh(); }
public static void RemoveKey(AnimationClip clip, EditorCurveBinding sourceBinding, SerializedProperty prop, double time) { if (sourceBinding.get_isPPtrCurve()) { CurveEditUtility.RemoveObjectKey(clip, sourceBinding, time); } else if (CurveEditUtility.IsRotationKey(sourceBinding)) { CurveEditUtility.RemoveRotationKey(clip, sourceBinding, prop, time); } else { CurveEditUtility.RemoveFloatKey(clip, sourceBinding, prop, time); } }