diff --git a/Package/Editor/FancyAnimationCurveDrawer.cs b/Package/Editor/FancyAnimationCurveDrawer.cs new file mode 100644 index 0000000..335e703 --- /dev/null +++ b/Package/Editor/FancyAnimationCurveDrawer.cs @@ -0,0 +1,56 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using AnimationUtility = TMPEffects.TMPAnimations.AnimationUtility; + +[CustomPropertyDrawer(typeof(AnimationUtility.FancyAnimationCurve))] +public class FancyAnimationCurveDrawer : PropertyDrawer +{ + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + var rect = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight); + + var width = EditorStyles.label.CalcSize(label); + var ctrlRect = EditorGUI.PrefixLabel(rect, GUIUtility.GetControlID(FocusType.Passive, rect), label); + var foldoutRect = new Rect(rect.x + width.x + 15, rect.y, 20, EditorGUIUtility.singleLineHeight); + + var curveProp = property.FindPropertyRelative("curve"); + + curveProp.isExpanded = EditorGUI.Foldout(foldoutRect, curveProp.isExpanded, new GUIContent("")); + + // TODO Strange ass workaround for offset created by EditorGUI.PrefixLabel + EditorGUI.indentLevel--; + EditorGUI.indentLevel--; + EditorGUI.PropertyField(ctrlRect, curveProp, new GUIContent("")); + EditorGUI.indentLevel++; + EditorGUI.indentLevel++; + + if (curveProp.isExpanded) + { + EditorGUI.indentLevel++; + rect.y += EditorGUIUtility.singleLineHeight; + EditorGUI.PropertyField(rect, property.FindPropertyRelative("offsetType")); + rect.y += EditorGUIUtility.singleLineHeight; + EditorGUI.PropertyField(rect, property.FindPropertyRelative("wrapMode")); + rect.y += EditorGUIUtility.singleLineHeight; + EditorGUI.PropertyField(rect, property.FindPropertyRelative("uniformity")); + EditorGUI.indentLevel--; + } + + EditorGUI.EndProperty(); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + var curveProp = property.FindPropertyRelative("curve"); + if (curveProp.isExpanded) + { + return EditorGUIUtility.singleLineHeight * 4; + } + + return EditorGUIUtility.singleLineHeight; + } +} \ No newline at end of file diff --git a/Package/Editor/FancyAnimationCurveDrawer.cs.meta b/Package/Editor/FancyAnimationCurveDrawer.cs.meta new file mode 100644 index 0000000..9a0de89 --- /dev/null +++ b/Package/Editor/FancyAnimationCurveDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a28f8b74c2742643921dbf0b8b055e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Package/Editor/GenericAnimation/AnimationStepDrawer.cs b/Package/Editor/GenericAnimation/AnimationStepDrawer.cs index 0fb50ea..ed09857 100644 --- a/Package/Editor/GenericAnimation/AnimationStepDrawer.cs +++ b/Package/Editor/GenericAnimation/AnimationStepDrawer.cs @@ -58,8 +58,15 @@ protected float GetCommonHeight(SerializedProperty property) { float height = EditorGUIUtility.singleLineHeight * 3; // Blending + in out headers - if (entryCurve.isExpanded) height += EditorGUIUtility.singleLineHeight * 2; - if (exitCurve.isExpanded) height += EditorGUIUtility.singleLineHeight * 2; + if (entryCurve.isExpanded) + { + height += EditorGUIUtility.singleLineHeight + EditorGUI.GetPropertyHeight(entryCurve); + } + + if (exitCurve.isExpanded) + { + height += EditorGUIUtility.singleLineHeight + EditorGUI.GetPropertyHeight(exitCurve); + } height += EditorGUIUtility.singleLineHeight * 3; // Space + waves @@ -87,7 +94,7 @@ protected void DrawCommon(Rect rect, SerializedProperty property, GUIContent lab if (entryCurve.isExpanded) { EditorGUI.indentLevel++; - var bgRect = new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight * 2); + var bgRect = new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight +EditorGUI.GetPropertyHeight(entryCurve)); EditorGUI.DrawRect(bgRect, backgroundColor); EditorGUI.BeginChangeCheck(); @@ -100,7 +107,7 @@ protected void DrawCommon(Rect rect, SerializedProperty property, GUIContent lab rect.y += EditorGUIUtility.singleLineHeight; EditorGUI.PropertyField(rect, entryCurve); - rect.y += EditorGUIUtility.singleLineHeight; + rect.y += EditorGUI.GetPropertyHeight(entryCurve); EditorGUI.indentLevel--; } @@ -110,7 +117,7 @@ protected void DrawCommon(Rect rect, SerializedProperty property, GUIContent lab if (exitCurve.isExpanded) { EditorGUI.indentLevel++; - var bgRect = new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight * 2); + var bgRect = new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight + EditorGUI.GetPropertyHeight(exitCurve)); EditorGUI.DrawRect(bgRect, backgroundColor); EditorGUI.BeginChangeCheck(); @@ -123,7 +130,7 @@ protected void DrawCommon(Rect rect, SerializedProperty property, GUIContent lab rect.y += EditorGUIUtility.singleLineHeight; EditorGUI.PropertyField(rect, exitCurve); - rect.y += EditorGUIUtility.singleLineHeight; + rect.y += EditorGUI.GetPropertyHeight(exitCurve); EditorGUI.indentLevel--; } diff --git a/Package/Editor/GenericAnimation/GenericAnimationEditor.cs b/Package/Editor/GenericAnimation/GenericAnimationEditor.cs index 903466e..a9b9063 100644 --- a/Package/Editor/GenericAnimation/GenericAnimationEditor.cs +++ b/Package/Editor/GenericAnimation/GenericAnimationEditor.cs @@ -6,6 +6,7 @@ using System.IO; using System.Linq; using System.Text.RegularExpressions; +using NUnit.Framework; using TMPEffects.CharacterData; using TMPEffects.Editor; using TMPEffects.Extensions; @@ -14,6 +15,7 @@ using UnityEditor; using UnityEditorInternal; using UnityEngine; +using AnimationUtility = TMPEffects.TMPAnimations.AnimationUtility; [CustomEditor(typeof(GenericAnimation))] public class GenericAnimationEditor : TMPAnimationEditorBase @@ -33,6 +35,79 @@ protected override void OnEnable() _ = new ReorderableList(serializedObject, serializedObject.FindProperty("Tracks").FindPropertyRelative("Tracks"), true, false, true, true); UpdateLists(); + + var trackProp = serializedObject.FindProperty("Tracks").FindPropertyRelative("Tracks"); + for (int i = 0; i < trackProp.arraySize; i++) + { + var clips = trackProp.GetArrayElementAtIndex(i).FindPropertyRelative("clips"); + QuickSort(clips, 0, clips.arraySize - 1, new SortClipComparer()); + } + } + + protected override void OnDisable() + { + var trackProp = serializedObject.FindProperty("Tracks").FindPropertyRelative("Tracks"); + for (int i = 0; i < trackProp.arraySize; i++) + { + var clips = trackProp.GetArrayElementAtIndex(i).FindPropertyRelative("clips"); + QuickSort(clips, 0, clips.arraySize - 1, new SortClipComparer()); + } + } + + // Alternatively: + // Clamp value to not interfere with any other values + // TODO Didnt work at all; might still want that + private void OnChangedStartOrDurationAlt(int listIndex, int changedIndex, params int[] ignoreIndex) + { + var clips = serializedObject.FindProperty("Tracks").FindPropertyRelative("Tracks") + .GetArrayElementAtIndex(listIndex).FindPropertyRelative("clips"); + var changedProp = clips.GetArrayElementAtIndex(changedIndex); + + float changedStartTime = changedProp.FindPropertyRelative("startTime").floatValue; + float changedDuration = changedProp.FindPropertyRelative("duration").floatValue; + float changedEndTime = changedStartTime + changedDuration; + + // Update all start times and durations to accomodate for changed time + for (int i = 0; i < clips.arraySize; i++) + { + if (i == changedIndex || ignoreIndex.Contains(i)) continue; + + var step = clips.GetArrayElementAtIndex(i); + + // Cases + + float startTime = step.FindPropertyRelative("startTime").floatValue; + float duration = step.FindPropertyRelative("duration").floatValue; + float endTime = startTime + duration; + + // if changed starts after clip + if (changedStartTime > startTime) + { + // if changed start contained in clip + if (changedStartTime < endTime) + { + float prev = changedStartTime; + changedStartTime = endTime; + changedDuration = Mathf.Max(0f, duration - (changedStartTime - prev)); + changedEndTime = changedStartTime + changedDuration; + } + + continue; + } + + // if changed ends in clip + if (changedEndTime > startTime) + { + if (changedEndTime < endTime) + { + changedDuration = changedStartTime + (endTime - changedEndTime); + changedEndTime = changedStartTime + changedDuration; + } + } + } + + changedProp.FindPropertyRelative("startTime").floatValue = changedStartTime; + changedProp.FindPropertyRelative("duration").floatValue = changedDuration; } // Update all other durations when one was changed in the inspector @@ -137,14 +212,14 @@ private void DrawElementCallback(int listindex, Rect rect, int index, bool isact EditorGUIUtility.labelWidth = 0; EditorGUI.PropertyField(rect, itemProp, GUIContent.none); } - + private float MainElementHeightCallback(int index) { var tracksprop = serializedObject.FindProperty("Tracks").FindPropertyRelative("Tracks"); var clips = tracksprop.GetArrayElementAtIndex(index).FindPropertyRelative("clips"); return EditorGUI.GetPropertyHeight(clips); } - + private void MainAddCallback(ReorderableList list) { Debug.LogWarning("ADD"); @@ -281,7 +356,7 @@ public override void OnInspectorGUI() for (int i = 0; i < trackProp.arraySize; i++) { var clips = trackProp.GetArrayElementAtIndex(i).FindPropertyRelative("clips"); - QuickSort(clips, 0, clips.arraySize-1, new SortClipComparer()); + QuickSort(clips, 0, clips.arraySize - 1, new SortClipComparer()); } } @@ -416,10 +491,10 @@ public static void Export(SerializedObject serializedObject, string exportPath, throw new System.InvalidOperationException( "The passed in serializedObject's target object is not a GenericAnimation"); - var steps = GetAnimationSteps(serializedObject.FindProperty("animationSteps")); + var tracks = GetTracks(serializedObject.FindProperty("Tracks").FindPropertyRelative("Tracks")); var repeats = serializedObject.FindProperty("repeat").boolValue; var duration = serializedObject.FindProperty("duration").floatValue; - GenerateScriptFromModifier(name, exportPath, repeats, duration, steps); + GenerateScriptFromModifier(name, exportPath, repeats, duration, tracks); } public static void Export(GenericAnimation anim, string filePath) @@ -430,6 +505,19 @@ public static void Export(GenericAnimation anim, string filePath) // GenerateScriptFromModifier(filePath, repeats, duration, steps); } + static List> GetTracks(SerializedProperty property) + { + List> tracks = new List>(); + for (int i = 0; i < property.arraySize; i++) + { + var trackProp = property.GetArrayElementAtIndex(i).FindPropertyRelative("clips"); + var clips = GetAnimationSteps(trackProp); + tracks.Add(clips); + } + + return tracks; + } + static List GetAnimationSteps(SerializedProperty animationStepsProp) { List steps = new List(); @@ -457,38 +545,50 @@ protected override T GetKeyForItem(T item) } } - static OrderedHashSet GetAnimationStepNames(List steps) + static Dictionary> GetAnimationStepNames(List> tracks) { - OrderedHashSet names = new OrderedHashSet(); + Dictionary> names = new Dictionary>(); - foreach (var step in steps) + int trackCounter = 0; + int stepCounter = 0; + foreach (var track in tracks) { - string nameToAdd = step.name; - - // replace invlid characters - Debug.Log("Turned " + nameToAdd + " into " + Regex.Replace(nameToAdd, @"[^a-zA-Z0-9_]", "")); - nameToAdd = Regex.Replace(nameToAdd, @"[^a-zA-Z0-9_]", ""); + List currnames = new List(); + names[trackCounter] = currnames; - if (string.IsNullOrWhiteSpace(nameToAdd)) + foreach (var step in track) { - nameToAdd = "Element_" + names.Count; - } + string nameToAdd = step.name; - if (names.Contains(nameToAdd)) - { - nameToAdd += "_"; + // replace invlid characters + nameToAdd = Regex.Replace(nameToAdd, @"[^a-zA-Z0-9_]", ""); - int counter = 0; - while (names.Contains(nameToAdd + counter.ToString())) + if (string.IsNullOrWhiteSpace(nameToAdd)) { - counter++; + nameToAdd = "Track_" + trackCounter + "_" + stepCounter; } + else nameToAdd = "Track_" + trackCounter + "_" + nameToAdd; + + nameToAdd = ReplaceWhitespaceWithUnderscore(nameToAdd); + + if (currnames.Contains(nameToAdd)) + { + nameToAdd += "_"; + + int counter = 0; + while (currnames.Contains(nameToAdd + counter.ToString())) + { + counter++; + } - nameToAdd = nameToAdd + counter.ToString(); + nameToAdd += counter.ToString(); + } + + currnames.Add(nameToAdd); + stepCounter++; } - nameToAdd = ReplaceWhitespaceWithUnderscore(nameToAdd); - names.Add(nameToAdd); + trackCounter++; } return names; @@ -500,7 +600,7 @@ static string ReplaceWhitespaceWithUnderscore(string s) } static bool GenerateScriptFromModifier(string filePath, bool repeats, float duration, - List steps) + List> steps) { var name = Path.GetFileNameWithoutExtension(filePath); var path = Path.GetDirectoryName(filePath); @@ -508,9 +608,9 @@ static bool GenerateScriptFromModifier(string filePath, bool repeats, float dura } static bool GenerateScriptFromModifier(string className, string fileNamePath, bool repeats, float duration, - List steps) + List> steps) { - OrderedHashSet names = GetAnimationStepNames(steps); + var names = GetAnimationStepNames(steps); className = ReplaceWhitespaceWithUnderscore(className); string code = string.Format(@"using System.Collections.Generic; @@ -617,25 +717,29 @@ private bool ApplyAnimationStep(AnimationStep step, float timeValue, CharData cD return GenerateScriptFromContext(fileNamePath + "/" + className + ".cs", code); } - private static string GenerateStepParameters(List steps, - OrderedHashSet names) + private static string GenerateStepParameters(List> tracks, + Dictionary> names) { string code = ""; - - for (int i = 0; i < steps.Count; i++) + int trackIndex = -1; + foreach (var steps in tracks) { - var step = steps[i]; - var name = names[i]; + trackIndex++; - code += - $@" + for (int i = 0; i < steps.Count; i++) + { + var step = steps[i]; + var name = names[trackIndex][i]; + + code += + $@" [SerializeField] private AnimationStep Step_{name} = new AnimationStep() {{ name = ""{step.name}"", entryDuration = {GetFloatString(step.entryDuration)}, - entryCurve = {GetAnimCurveString(step.entryCurve)}, + entryCurve = {GetFancyAnimCurveString(step.entryCurve)}, exitDuration = {GetFloatString(step.exitDuration)}, - exitCurve = {GetAnimCurveString(step.exitCurve)}, + exitCurve = {GetFancyAnimCurveString(step.exitCurve)}, loops = {step.loops.ToString().ToLower()}, startTime = {GetFloatString(step.startTime)}, duration = {GetFloatString(step.duration)}, @@ -658,8 +762,8 @@ private static string GenerateStepParameters(List steps, {(!step.modifiers.BR_Position.Equals(new ParameterTypes.TypedVector3(ParameterTypes.VectorType.Offset, Vector3.zero)) ? $"BR_Position = {GetTypedVector3String(step.modifiers.BR_Position)}," : "")} {(step.modifiers.BL_Color.Override != 0 ? $"BL_Color = {GetColorOverrideString(step.modifiers.BL_Color)}," : "")} {(step.modifiers.TL_Color.Override != 0 ? $"TL_Color = {GetColorOverrideString(step.modifiers.TL_Color)}," : "")} - {(step.modifiers.TR_Color.Override != 0 ? $"BL_Color = {GetColorOverrideString(step.modifiers.TR_Color)}," : "")} - {(step.modifiers.BR_Color.Override != 0 ? $"BL_Color = {GetColorOverrideString(step.modifiers.BR_Color)}," : "")} + {(step.modifiers.TR_Color.Override != 0 ? $"TR_Color = {GetColorOverrideString(step.modifiers.TR_Color)}," : "")} + {(step.modifiers.BR_Color.Override != 0 ? $"BR_Color = {GetColorOverrideString(step.modifiers.BR_Color)}," : "")} }}, {(step.useInitialModifiers ? @$"initModifiers = new EditorFriendlyCharDataModifiers() {{ @@ -674,16 +778,17 @@ private static string GenerateStepParameters(List steps, {(!step.initModifiers.BR_Position.Equals(new ParameterTypes.TypedVector3(ParameterTypes.VectorType.Offset, Vector3.zero)) ? $"BR_Position = {GetTypedVector3String(step.initModifiers.BR_Position)}," : "")} {(step.initModifiers.BL_Color.Override != 0 ? $"BL_Color = {GetColorOverrideString(step.initModifiers.BL_Color)}," : "")} {(step.initModifiers.TL_Color.Override != 0 ? $"TL_Color = {GetColorOverrideString(step.initModifiers.TL_Color)}," : "")} - {(step.initModifiers.TR_Color.Override != 0 ? $"BL_Color = {GetColorOverrideString(step.initModifiers.TR_Color)}," : "")} - {(step.initModifiers.BR_Color.Override != 0 ? $"BL_Color = {GetColorOverrideString(step.initModifiers.BR_Color)}," : "")} + {(step.initModifiers.TR_Color.Override != 0 ? $"TR_Color = {GetColorOverrideString(step.initModifiers.TR_Color)}," : "")} + {(step.initModifiers.BR_Color.Override != 0 ? $"BR_Color = {GetColorOverrideString(step.initModifiers.BR_Color)}," : "")} }}" : "")} }};"; - code = string.Join(Environment.NewLine, code - .Split(new[] { Environment.NewLine }, StringSplitOptions.None) - .Where(line => !string.IsNullOrWhiteSpace(line))); + code = string.Join(Environment.NewLine, code + .Split(new[] { Environment.NewLine }, StringSplitOptions.None) + .Where(line => !string.IsNullOrWhiteSpace(line))); - code += "\n"; + code += "\n"; + } } return code; @@ -719,6 +824,18 @@ private static string GetRotationsString(List modifiersR return str.Substring(0, str.Length - 1); } + private static string GetFancyAnimCurveString(AnimationUtility.FancyAnimationCurve curve) + { + // TODO TMPWrapMode and WaveOffsetType (for that second one wait to see if i do poweroffsettype) + var str = $@"new FancyAnimationCurve() +{{ + Curve = {GetAnimCurveString(curve.Curve)}, + Uniformity = {GetFloatString(curve.Uniformity)}, +}} +"; + return str; + } + private static string GetAnimCurveString(AnimationCurve curve) { var str = "new AnimationCurve("; @@ -768,19 +885,25 @@ private static string GetColorString(Color32 color) $"new Color32({color.r}, {color.g}, {color.b}, {color.a})"; } - static string GenerateAnimateCode(List steps, OrderedHashSet names) + static string GenerateAnimateCode(List> tracks, Dictionary> names) { string code = @" accumulated.Reset(); float timeValue = data.repeat ? context.AnimatorContext.PassedTime % data.duration : context.AnimatorContext.PassedTime; "; - for (int i = 0; i < steps.Count; i++) + int trackIndex = -1; + foreach (var steps in tracks) { - var name = names[i]; - code += $@" + trackIndex++; + + for (int i = 0; i < steps.Count; i++) + { + var name = names[trackIndex][i]; + code += $@" if (ApplyAnimationStep(Step_{name}, timeValue, cData, context)) accumulated.Combine(current); "; + } } code += $@" diff --git a/Package/Editor/PowerEnumDrawer.cs b/Package/Editor/PowerEnumDrawer.cs new file mode 100644 index 0000000..8b3f53d --- /dev/null +++ b/Package/Editor/PowerEnumDrawer.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +[CustomPropertyDrawer(typeof(PowerEnum<,>), true)] +public class PowerEnumDrawer : PropertyDrawer +{ + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(position, label, property); + + var enumProp = property.FindPropertyRelative("enumValue"); + var customProp = property.FindPropertyRelative("customValue"); + var useCustomProp = property.FindPropertyRelative("useCustom"); + + List options = new List(enumProp.enumDisplayNames); + options.Add("Custom"); + + int selectedIndex = -1; + if (!useCustomProp.boolValue) + selectedIndex = enumProp.enumValueIndex; + else selectedIndex = options.Count - 1; + + var rect = new Rect(position.x, position.y, position.width, position.height); + var ctrlRect = EditorGUI.PrefixLabel(rect, label); + + int index; + + // Custom + if (selectedIndex == options.Count - 1) + { + var width = ctrlRect.width; + ctrlRect.width *= 0.25f; + var ctrlRect2 = new Rect(ctrlRect.x + ctrlRect.width, ctrlRect.y, width * 0.75f, ctrlRect.height); + index = EditorGUI.Popup(ctrlRect, selectedIndex, options.ToArray()); + EditorGUI.PropertyField(ctrlRect2, customProp, GUIContent.none); + } + // Normal + else + { + index = EditorGUI.Popup(ctrlRect, selectedIndex, options.ToArray()); + } + + useCustomProp.boolValue = index == options.Count - 1; + + EditorGUI.EndProperty(); + } +} \ No newline at end of file diff --git a/Package/Editor/PowerEnumDrawer.cs.meta b/Package/Editor/PowerEnumDrawer.cs.meta new file mode 100644 index 0000000..a2a84fc --- /dev/null +++ b/Package/Editor/PowerEnumDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 902c3b25cdf4d8949ba559745fb12c63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Package/Editor/Timeline/TMPMeshModifierClipEditor.cs b/Package/Editor/Timeline/TMPMeshModifierClipEditor.cs index 179ea4b..0c46b53 100644 --- a/Package/Editor/Timeline/TMPMeshModifierClipEditor.cs +++ b/Package/Editor/Timeline/TMPMeshModifierClipEditor.cs @@ -65,8 +65,8 @@ public override void DrawBackground(TimelineClip clip, ClipBackgroundRegion regi var drawCurves = EditorPrefs.GetBool(TMPEffectsTimelineEditorPrefsKeys.DRAW_CURVES_EDITORPREFS_KEY); if (drawCurves) { - DrawBackgroundWithCurve(mClip.Step.Step.entryCurve, inRect, leftWidth, true); - DrawBackgroundWithCurve(mClip.Step.Step.exitCurve, outRect, rightWidth, false); + DrawBackgroundWithCurve(mClip.Step.Step.entryCurve.Curve, inRect, leftWidth, true); + DrawBackgroundWithCurve(mClip.Step.Step.exitCurve.Curve, outRect, rightWidth, false); } else { diff --git a/Package/Editor/Timeline/TimelineUtility.cs b/Package/Editor/Timeline/TimelineUtility.cs index 672d076..c06bacb 100644 --- a/Package/Editor/Timeline/TimelineUtility.cs +++ b/Package/Editor/Timeline/TimelineUtility.cs @@ -14,6 +14,7 @@ internal static class TimelineUtility { + #region ExportAsGeneric public static int ExportAsGenericDialog(ActionContext context) { GenericAnimation animation = ScriptableObject.CreateInstance(); @@ -49,6 +50,7 @@ private static GenericAnimation CreateGenericFromAllClips(ActionContext context) var step = copy.Step.Step; // Copy over clip properties + step.name = clip.displayName; step.duration = (float)clip.duration; step.startTime = (float)clip.start; step.preExtrapolation = clip.preExtrapolationMode.ConvertExtrapolation(); @@ -92,6 +94,7 @@ private static GenericAnimation CreateGenericAnimationFromSelectedClips(ActionCo var step = copy.Step.Step; // Copy over clip properties + step.name = clip.displayName; step.duration = (float)clip.duration; step.startTime = (float)clip.start; step.preExtrapolation = clip.preExtrapolationMode.ConvertExtrapolation(); @@ -135,8 +138,10 @@ public static bool ExportAsGeneric(ActionContext context, int option) return false; } + #endregion - public static string MakeRelative(string filePath, string referencePath) + #region Directory stuff + static string MakeRelative(string filePath, string referencePath) { var fileUri = new Uri(filePath); var referenceUri = new Uri(referencePath); @@ -160,6 +165,7 @@ static void EnsureDirectoryExists(string directoryPath) dirPath += "/" + hierarchy[i]; } } + #endregion static void GenerateScriptableFromContext(string filePath, GenericAnimation anim) { @@ -206,6 +212,7 @@ static bool GenerateScriptFromContext(string fileNamePath, string code) return true; } + #region ExportAsScript public static int ExportAsScriptDialog(ActionContext context) { int result = EditorUtility.DisplayDialogComplex("Export to TMPAnimation Script", @@ -237,7 +244,9 @@ public static bool ExportAsScript(ActionContext context, int option) return false; } - + #endregion + + #region UnpackGeneric public static bool UnpackGenericDialog(ActionContext context) { bool result = EditorUtility.DisplayDialog("Unpack generic animation", @@ -271,7 +280,9 @@ public static bool UnpackGeneric(ActionContext context) { var timelineClip = parentTrack.CreateClip(); var modClip = timelineClip.asset as TMPMeshModifierClip; - modClip.Step.Step = animClip; // TODO Will this cause issues with serializerference? maybe clone here? + modClip.Step.Step = new AnimationStep(animClip); + + timelineClip.displayName = animClip.name; timelineClip.start = animClip.startTime; timelineClip.duration = animClip.duration; @@ -286,7 +297,7 @@ public static bool UnpackGeneric(ActionContext context) } EditorUtility.SetDirty(context.timeline); - TimelineEditor.Refresh(RefreshReason.ContentsAddedOrRemoved ); + TimelineEditor.Refresh(RefreshReason.ContentsAddedOrRemoved); } // foreach (var track in tracks) @@ -296,4 +307,5 @@ public static bool UnpackGeneric(ActionContext context) return true; } + #endregion } \ No newline at end of file diff --git a/Package/Example SceneAnimations/Basic/FlashlightAnimation.cs b/Package/Example SceneAnimations/Basic/FlashlightAnimation.cs index 88d1a35..5f6d217 100644 --- a/Package/Example SceneAnimations/Basic/FlashlightAnimation.cs +++ b/Package/Example SceneAnimations/Basic/FlashlightAnimation.cs @@ -71,7 +71,7 @@ public override void Animate(CharData cData, IAnimationContext context) Debug.LogError("Failed to calculate ScreenPointToWorldPointInRectangle"); } - context.Modifiers.CalculateVertexPositions(cData, context.AnimatorContext); + context.AnimatorContext.Modifiers.CalculateVertexPositions(cData, context.AnimatorContext); for (int i = 0; i < 4; i++) { Vector3 vertex; @@ -79,23 +79,23 @@ public override void Animate(CharData cData, IAnimationContext context) switch (i) { case 0: - vertex = text.transform.TransformPoint(context.Modifiers.BL_Result); + vertex = text.transform.TransformPoint(context.AnimatorContext.Modifiers.BL_Result); break; case 1: - vertex = text.transform.TransformPoint(context.Modifiers.TL_Result); + vertex = text.transform.TransformPoint(context.AnimatorContext.Modifiers.TL_Result); break; case 2: - vertex = text.transform.TransformPoint(context.Modifiers.TR_Result); + vertex = text.transform.TransformPoint(context.AnimatorContext.Modifiers.TR_Result); break; case 3: - vertex = text.transform.TransformPoint(context.Modifiers.BR_Result); + vertex = text.transform.TransformPoint(context.AnimatorContext.Modifiers.BR_Result); break; default: throw new System.Exception(); } float magnitude = (res - vertex).magnitude; - Color32 color = context.Modifiers.MeshModifiers.TL_Color.GetValue(cData.InitialMesh.TL_Color); + Color32 color = context.AnimatorContext.Modifiers.MeshModifiers.TL_Color.GetValue(cData.InitialMesh.TL_Color); if (magnitude < d.radius) { diff --git a/Package/Runtime/CharData/Mesh Modifiers/CharDataModifiers.cs b/Package/Runtime/CharData/Mesh Modifiers/CharDataModifiers.cs index 8deeec6..91288bd 100644 --- a/Package/Runtime/CharData/Mesh Modifiers/CharDataModifiers.cs +++ b/Package/Runtime/CharData/Mesh Modifiers/CharDataModifiers.cs @@ -246,7 +246,6 @@ public static void LerpMeshModifiersUnclamped(CharData cData, TMPMeshModifiers s result.BR_Color = ColorOverride.LerpUnclamped(cData.InitialMesh.BR_Color, end.BR_Color, t); } } - Debug.LogWarning("You better 2 " + result.BR_Color); if (combinedFlags.HasFlag(TMPMeshModifiers.ModifierFlags.UVs)) { diff --git a/Package/Runtime/CharData/Mesh Modifiers/EditorFriendlyCharDataModifiers.cs b/Package/Runtime/CharData/Mesh Modifiers/EditorFriendlyCharDataModifiers.cs index c918201..30431bb 100644 --- a/Package/Runtime/CharData/Mesh Modifiers/EditorFriendlyCharDataModifiers.cs +++ b/Package/Runtime/CharData/Mesh Modifiers/EditorFriendlyCharDataModifiers.cs @@ -66,6 +66,30 @@ public class EditorFriendlyCharDataModifiers public ParameterTypes.TypedVector3 BR_UV0 = new ParameterTypes.TypedVector3(ParameterTypes.VectorType.Offset, Vector3.zero); + + public EditorFriendlyCharDataModifiers() {} + + public EditorFriendlyCharDataModifiers(EditorFriendlyCharDataModifiers other) + { + Position = other.Position; + Scale = other.Scale; + Rotations = new List(other.Rotations); + + BL_Position = other.BL_Position; + TL_Position = other.TL_Position; + TR_Position = other.TR_Position; + BR_Position = other.BR_Position; + + BL_Color = other.BL_Color; + TL_Color = other.TL_Color; + TR_Color = other.TR_Color; + BR_Color = other.BR_Color; + + BL_UV0 = other.BL_UV0; + TL_UV0 = other.TL_UV0; + TR_UV0 = other.TR_UV0; + BR_UV0 = other.BR_UV0; + } private bool dirty = false; diff --git a/Package/Runtime/Components/TMPAnimator/IAnimatorContext.cs b/Package/Runtime/Components/TMPAnimator/IAnimatorContext.cs index 9039d80..20f7842 100644 --- a/Package/Runtime/Components/TMPAnimator/IAnimatorContext.cs +++ b/Package/Runtime/Components/TMPAnimator/IAnimatorContext.cs @@ -8,9 +8,11 @@ namespace TMPEffects.Components.Animator /// public interface IAnimatorContext { + /// + /// The current state of the CharData, with the previous animations applied. + /// public CharDataModifiers Modifiers { get; } - /// /// Whether animations are scaled. /// diff --git a/Package/Runtime/Effects/TMPAnimations/AnimationStep.cs b/Package/Runtime/Effects/TMPAnimations/AnimationStep.cs index f81dc44..c887c89 100644 --- a/Package/Runtime/Effects/TMPAnimations/AnimationStep.cs +++ b/Package/Runtime/Effects/TMPAnimations/AnimationStep.cs @@ -14,19 +14,20 @@ public class AnimationStep public string name; public bool animate = true; - public AnimationCurve entryCurve; + public AnimationUtility.FancyAnimationCurve entryCurve; public float entryDuration; - public AnimationCurve exitCurve; + public AnimationUtility.FancyAnimationCurve exitCurve; public float exitDuration; public ExtrapolationMode preExtrapolation; public ExtrapolationMode postExtrapolation; + // TODO These dont really make much sense anymore right now since itll just overwrite the following steps / clips + // Then: Need to figure out how to do oneshot vs looping animations. Maybe loop per track. or smth idk. [Tooltip("Whether this animation step should automatically loop over time. " + "For GenericAnimations, this can be disregarded if the animation itself is set to repeat.")] public bool loops; - [Tooltip("How many times this animation step should automatically loop over time. " + "For GenericAnimations, this can be disregarded if the animation itself is set to repeat.")] public uint repetitions; @@ -52,20 +53,14 @@ public AnimationStep() { } - /* - * TODO - * Added this constructor because AnimSteps are serialized as reference; for exporting need to clone - * TODO - * Test whether this works fine or also need to create new instance of all held classes (prolly yes) - */ public AnimationStep(AnimationStep original) { name = original.name; animate = original.animate; - entryCurve = original.entryCurve; + entryCurve = new AnimationUtility.FancyAnimationCurve(original.entryCurve); entryDuration = original.entryDuration; - exitCurve = original.exitCurve; + exitCurve = new AnimationUtility.FancyAnimationCurve(original.exitCurve); exitDuration = original.exitDuration; preExtrapolation = original.preExtrapolation; @@ -76,14 +71,14 @@ public AnimationStep(AnimationStep original) useWave = original.useWave; waveOffsetType = original.waveOffsetType; - wave = original.wave; + wave = new AnimationUtility.Wave(original.wave); // TODO Wave is class so need to copy here startTime = original.startTime; duration = original.duration; useInitialModifiers = original.useInitialModifiers; - initModifiers = original.initModifiers; - modifiers = original.modifiers; + initModifiers = new EditorFriendlyCharDataModifiers(original.initModifiers); + modifiers = new EditorFriendlyCharDataModifiers(original.modifiers); } public enum ExtrapolationMode diff --git a/Package/Runtime/Effects/TMPAnimations/AnimationUtility.cs b/Package/Runtime/Effects/TMPAnimations/AnimationUtility.cs index 1319fe4..da92db1 100644 --- a/Package/Runtime/Effects/TMPAnimations/AnimationUtility.cs +++ b/Package/Runtime/Effects/TMPAnimations/AnimationUtility.cs @@ -6,6 +6,8 @@ using TMPro; using TMPEffects.Components; using TMPEffects.Parameters; +using UnityEngine.Serialization; +using UnityEngine.UIElements; namespace TMPEffects.TMPAnimations { @@ -323,6 +325,67 @@ public static Vector3 ClosestPointOnLine(Vector3 lineStart, Vector3 lineEnd, Vec #endregion + [System.Serializable] + public class FancyAnimationCurve + { + public AnimationCurve Curve + { + get => curve; + set => curve = value; + } + + public float Uniformity + { + get => uniformity; + set => uniformity = value; + } + + public ParameterTypes.WaveOffsetType OffsetType + { + get => offsetType; + set => offsetType = value; + } + + public TMPWrapMode WrapMode + { + get => wrapMode; + set => wrapMode = value; + } + + [SerializeField] private AnimationCurve curve; + [SerializeField] private float uniformity; + [SerializeField] private ParameterTypes.WaveOffsetType offsetType; + [SerializeField] private TMPWrapMode wrapMode; + + public FancyAnimationCurve() {} + + public FancyAnimationCurve(FancyAnimationCurve original) + { + curve = new AnimationCurve(original.curve.keys); + uniformity = original.uniformity; + offsetType = original.offsetType; + wrapMode = original.wrapMode; + } + + // TODO Quick addition to make evaluation without anim context possible + // TODO If i do split interfaces up further wont be necessary anymore i think + public float Evaluate(CharData cData, IAnimatorContext ctx, float time) + { + float offset = GetWaveOffset(cData, ctx, offsetType); + float t = time - offset * uniformity; + return GetValue(curve, wrapMode, t); + } + + public float Evaluate(CharData cData, IAnimationContext ctx, float time) + { + float offset = GetWaveOffset(cData, ctx, offsetType); + float t = time - offset * uniformity; + // t = Mathf.Abs(t); // TODO ? + return GetValue(curve, wrapMode, t); + } + } + + #region Waves /// @@ -643,6 +706,16 @@ public Wave(AnimationCurve upwardCurve, AnimationCurve downwardCurve, float upPe TroughWait = troughWait; } + public Wave(Wave wave) + { + uniformity = wave.uniformity; + crestWait = wave.crestWait; + troughWait = wave.troughWait; + downwardCurve = new AnimationCurve(wave.downwardCurve.keys); + upwardCurve = new AnimationCurve(wave.upwardCurve.keys); + wavelength = wave.wavelength; + } + /// /// Check whether an extrema was passed between ( - ) and .
/// This will automatically choose the correct way to interpret the wave. @@ -1179,7 +1252,8 @@ public override void OnAfterDeserialize() // TODO Quick solution for using this from TMPMeshModifier, where no AnimationContext is available // Could probably mock it instead - public static float GetWaveOffset(CharData cData, IAnimatorContext context, ParameterTypes.WaveOffsetType type, int segmentIndex = 0, + public static float GetWaveOffset(CharData cData, IAnimatorContext context, ParameterTypes.WaveOffsetType type, + int segmentIndex = 0, bool ignoreScaling = false) { switch (type) @@ -1361,22 +1435,57 @@ public static void SetToCharacter(TMP_Character newCharacter, TMP_Character orig /// The time value. /// The value of the curve at the given time value. /// - public static float GetValue(AnimationCurve curve, WrapMode wrapMode, float time) + public static float GetValue(AnimationCurve curve, WrapMode wrapMode, float time) + { + return GetValue(curve, wrapMode.ToTMPWrapMode(), time); + } + + public static float GetValue(AnimationCurve curve, TMPWrapMode wrapMode, float time) { float t; switch (wrapMode) { - case WrapMode.Loop: + case TMPWrapMode.Loop: t = Mathf.Repeat(time, 1); return curve.Evaluate(t); - case WrapMode.PingPong: + case TMPWrapMode.PingPong: t = Mathf.PingPong(time, 1); return curve.Evaluate(t); - case WrapMode.Once: + case TMPWrapMode.Clamp: return curve.Evaluate(time); - default: throw new System.ArgumentException("WrapMode " + wrapMode.ToString() + " not supported"); + default: throw new System.ArgumentException("TMPWrapMode " + wrapMode.ToString() + " not supported"); } } + + internal static TMPWrapMode ToTMPWrapMode(this WrapMode wrapMode) + { + switch (wrapMode) + { + case WrapMode.PingPong: return TMPWrapMode.PingPong; + case WrapMode.Clamp: return TMPWrapMode.Clamp; + case WrapMode.Loop: return TMPWrapMode.Loop; + default: throw new System.NotSupportedException("WrapMode " + wrapMode.ToString() + " can not be converted to TMPWrapMode"); + } + } + + public static WrapMode ToWrapMode(this TMPWrapMode wrapMode) + { + switch (wrapMode) + { + case TMPWrapMode.PingPong: return WrapMode.PingPong; + case TMPWrapMode.Clamp: return WrapMode.Clamp; + case TMPWrapMode.Loop: return WrapMode.Loop; + default: throw new System.NotSupportedException("TMPWrapMode " + wrapMode.ToString() + " can not be converted to WrapMode"); + } + } + + [Serializable] + public enum TMPWrapMode + { + Clamp, + Loop, + PingPong, + } } } \ No newline at end of file diff --git a/Package/Runtime/Effects/TMPAnimations/Basic Animations/GenericAnimation.cs b/Package/Runtime/Effects/TMPAnimations/Basic Animations/GenericAnimation.cs index 508c673..f4fc422 100644 --- a/Package/Runtime/Effects/TMPAnimations/Basic Animations/GenericAnimation.cs +++ b/Package/Runtime/Effects/TMPAnimations/Basic Animations/GenericAnimation.cs @@ -13,10 +13,69 @@ namespace TMPEffects.TMPAnimations menuName = "TMPEffects/Animations/Basic Animations/Generic Animation")] public sealed partial class GenericAnimation : TMPAnimation { + // TODO Theres a new weird issue "A previewrenderutility was not cleaned up" + // TODO Potentially might have smth to do with this. Idk why but it started happening around the time i implemented this. + protected override void OnValidate() + { + base.OnValidate(); + EnsureNonOverlappingTimings(); + } + + private void EnsureNonOverlappingTimings() + { + for (int i = 0; i < Tracks.Tracks.Count; i++) + { + var track = Tracks.Tracks[i]; + + // Ensure no negative values + for (int j = 0; j < track.Clips.Count; j++) + { + var step = track.Clips[j]; + if (step == null) continue; + + if (step.duration < 0) + step.duration = 0; + if (step.startTime < 0) + step.startTime = 0; + } + + var copy = new List(track.Clips); + copy.Sort(new StepComparer()); + float lastStartTime = -1, lastDuration = 0; + for (int j = 0; j < copy.Count; j++) + { + var step = copy[j]; + if (step == null || step.duration == 0) continue; + + // If starts while previous step still running + if (step.startTime < lastStartTime + lastDuration) + { + float prev = step.startTime; + step.startTime = lastStartTime + lastDuration; + step.duration = Mathf.Max(0f, step.duration - (step.startTime - prev)); + } + + lastStartTime = step.startTime; + lastDuration = step.duration; + } + + // TODO Uncommenting this will auto force sort clips + // (which makes the reorderable part of them sort of pointless unless same start and 0 duration) + // TODO Maybe make an editor only bool for whether to do this + // Tracks.Tracks[i].Clips = copy; + } + } + + [Serializable] public class Track { - public List Clips => clips; + public List Clips + { + get => clips; + set => clips = value; + } + [SerializeReference] private List clips = new List(); } @@ -99,7 +158,7 @@ public static bool ApplyAnimationStep(AnimationStep step, float timeValue, CharD break; } } - + // If time before clip starts (after adjusting for extrapolation) if (step.startTime > timeValue) return false; @@ -110,13 +169,13 @@ public static bool ApplyAnimationStep(AnimationStep step, float timeValue, CharD float entry = timeValue - step.startTime; if (step.entryDuration > 0 && entry <= step.entryDuration) { - weight = step.entryCurve.Evaluate(entry / step.entryDuration); + weight = step.entryCurve.Evaluate(cData, context,entry / step.entryDuration); } float exit = step.EndTime - timeValue; if (step.exitDuration > 0 && exit <= step.exitDuration) { - weight *= step.exitCurve.Evaluate(exit / step.exitDuration); + weight *= step.exitCurve.Evaluate(cData, context, exit / step.exitDuration); } if (step.useWave) @@ -192,10 +251,36 @@ public static void ApplyAnimationStepWeighted(AnimationStep step, float weight, private partial void Animate(CharData cData, AutoParametersData data, IAnimationContext context) { - Animate(cData, context.AnimatorContext, data.repeat, data.duration); + if (data.Steps == null) + { + data.Steps = new List>(); + for (int i = 0; i < Tracks.Tracks.Count; i++) + { + var track = Tracks.Tracks[i]; + var copy = new List(track.Clips); + copy.Sort(new StepComparer()); + data.Steps.Add(copy); + } + } + + Animate(cData, data.Steps, context.AnimatorContext, data.repeat, data.duration); + } + + private struct StepComparer : IComparer + { + public int Compare(AnimationStep x, AnimationStep y) + { + if (x == null || y == null) return 0; + if (x.startTime < y.startTime) return -1; + if (x.startTime > y.startTime) return 1; + if (x.EndTime < y.EndTime) return -1; + if (x.EndTime > y.EndTime) return 1; + return 0; + } } - public void Animate(CharData cData, IAnimatorContext context, bool repeat, float duration) + public void Animate(CharData cData, List> steps, IAnimatorContext context, bool repeat, + float duration) { // Create modifiers if needed modifiersStorage ??= new CharDataModifiers(); @@ -203,6 +288,8 @@ public void Animate(CharData cData, IAnimatorContext context, bool repeat, float accModifier ??= new CharDataModifiers(); current ??= new CharDataModifiers(); + // Init + // Calculate timeValue float timeValue = repeat ? context.PassedTime % duration : context.PassedTime; @@ -210,13 +297,14 @@ public void Animate(CharData cData, IAnimatorContext context, bool repeat, float // Reset accModifier accModifier.Reset(); - foreach (var track in Tracks.Tracks) + foreach (var track in steps) { - foreach (var step in track.Clips) - { - if (!ApplyAnimationStep(step, timeValue, cData, context, modifiersStorage, - modifiersStorage2, current)) continue; + var active = FindCurrentlyActive(timeValue, track); + if (active == -1) continue; + if (ApplyAnimationStep(track[active], timeValue, cData, context, modifiersStorage, + modifiersStorage2, current)) + { accModifier.MeshModifiers.Combine(current.MeshModifiers); accModifier.CharacterModifiers.Combine(current.CharacterModifiers); } @@ -225,5 +313,60 @@ public void Animate(CharData cData, IAnimatorContext context, bool repeat, float cData.MeshModifiers.Combine(accModifier.MeshModifiers); cData.CharacterModifiers.Combine(accModifier.CharacterModifiers); } + + private int FindCurrentlyActive(float timeValue, List steps) + { + if (steps == null || steps.Count == 0) return -1; + + // TODO This asssumes each track is sorted + for (int i = 0; i < steps.Count; i++) + { + var step = steps[i]; + + if (step == null || !step.animate) continue; + + // If on step + if (step.startTime < timeValue && step.EndTime > timeValue) + return i; + + // // If after step + // if (step.EndTime < timeValue) + // { + // if (i == (steps.Count - 1) || step.postExtrapolation != AnimationStep.ExtrapolationMode.None) + // return i; + // if (steps[i + 1].preExtrapolation != AnimationStep.ExtrapolationMode.None) + // return i + 1; + // + // Debug.LogWarning(i + " is after"); + // return -1; + // } + + // If before step + if (step.startTime > timeValue) + { + if (i == 0) + { + if (step.preExtrapolation != AnimationStep.ExtrapolationMode.None) return i; + return -1; + } + + if (steps[i - 1].postExtrapolation != AnimationStep.ExtrapolationMode.None) + return i - 1; + + if (step.preExtrapolation != AnimationStep.ExtrapolationMode.None) + return i; + + return -1; + } + } + + return steps.Count - 1; + } + + [AutoParametersStorage] + private partial class AutoParametersData + { + public List> Steps = null; + } } } \ No newline at end of file diff --git a/Package/Runtime/Effects/TMPAnimations/Basic Animations/WaveAnimation.cs b/Package/Runtime/Effects/TMPAnimations/Basic Animations/WaveAnimation.cs index d3801bd..be0d88c 100644 --- a/Package/Runtime/Effects/TMPAnimations/Basic Animations/WaveAnimation.cs +++ b/Package/Runtime/Effects/TMPAnimations/Basic Animations/WaveAnimation.cs @@ -22,6 +22,8 @@ public class WaveAnimation : TMPAnimation [SerializeField] WaveOffsetType waveOffsetType = WaveOffsetType.XPos; + [SerializeField] private OffsetTypePowerEnum powerEnum; + public override void Animate(CharData cData, IAnimationContext context) { Data data = (Data)context.CustomData; diff --git a/Package/Runtime/Effects/TMPAnimations/IAnimationContext.cs b/Package/Runtime/Effects/TMPAnimations/IAnimationContext.cs index af536e0..9feb386 100644 --- a/Package/Runtime/Effects/TMPAnimations/IAnimationContext.cs +++ b/Package/Runtime/Effects/TMPAnimations/IAnimationContext.cs @@ -13,6 +13,7 @@ public interface IAnimationContext /// The context of the animating TMPAnimator. ///
public IAnimatorContext AnimatorContext { get; } + /// /// Data about the animation segment. /// @@ -22,12 +23,7 @@ public interface IAnimationContext /// The custom data object. ///
public object CustomData { get; } - - /// - /// The current state of the CharData, with the previous animations applied. - /// - public CharDataModifiers Modifiers { get; } - + /// /// Check if the animation is considered finished for the character at the given index. /// diff --git a/Package/Runtime/Effects/TMPAnimations/ReadOnlyAnimationContext.cs b/Package/Runtime/Effects/TMPAnimations/ReadOnlyAnimationContext.cs index cf08fbf..f4b0e54 100644 --- a/Package/Runtime/Effects/TMPAnimations/ReadOnlyAnimationContext.cs +++ b/Package/Runtime/Effects/TMPAnimations/ReadOnlyAnimationContext.cs @@ -15,8 +15,6 @@ public class ReadOnlyAnimationContext : IAnimationContext public SegmentData SegmentData => context.SegmentData; /// public object CustomData => context.CustomData; - /// - public CharDataModifiers Modifiers => context.Modifiers; public ReadOnlyAnimationContext(IAnimationContext context) { diff --git a/Package/Runtime/Effects/TMPAnimations/Stack/AnimationStack.cs b/Package/Runtime/Effects/TMPAnimations/Stack/AnimationStack.cs index 6349903..5e1ee5c 100644 --- a/Package/Runtime/Effects/TMPAnimations/Stack/AnimationStack.cs +++ b/Package/Runtime/Effects/TMPAnimations/Stack/AnimationStack.cs @@ -172,8 +172,6 @@ public class AnimContext : IAnimationContext public object CustomData => customData; - public CharDataModifiers Modifiers => context.Modifiers; - public AnimContext(IAnimationContext context, object customData) { this.context = context; diff --git a/Package/Runtime/PowerEnum.meta b/Package/Runtime/PowerEnum.meta new file mode 100644 index 0000000..fb51923 --- /dev/null +++ b/Package/Runtime/PowerEnum.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b65c40b6e29a302428503b27ec6d9098 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Package/Runtime/PowerEnum/ExampleOffsetType.cs b/Package/Runtime/PowerEnum/ExampleOffsetType.cs new file mode 100644 index 0000000..53bbdbc --- /dev/null +++ b/Package/Runtime/PowerEnum/ExampleOffsetType.cs @@ -0,0 +1,14 @@ +using System.Collections; +using System.Collections.Generic; +using TMPEffects.CharacterData; +using TMPEffects.TMPAnimations; +using UnityEngine; + +public class ExampleOffsetType : TMPOffsetType +{ + public override float GetOffset(CharData cData, IAnimationContext context) + { + if (cData.info.character == 'A') return 0.5f; + return 0f; + } +} \ No newline at end of file diff --git a/Package/Runtime/PowerEnum/ExampleOffsetType.cs.meta b/Package/Runtime/PowerEnum/ExampleOffsetType.cs.meta new file mode 100644 index 0000000..255b431 --- /dev/null +++ b/Package/Runtime/PowerEnum/ExampleOffsetType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 70737ce0dfe1bda47b79fe94b60ab531 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Package/Runtime/PowerEnum/OffsetTypePowerEnum.cs b/Package/Runtime/PowerEnum/OffsetTypePowerEnum.cs new file mode 100644 index 0000000..6af5009 --- /dev/null +++ b/Package/Runtime/PowerEnum/OffsetTypePowerEnum.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using TMPEffects.CharacterData; +using TMPEffects.Parameters; +using TMPEffects.TMPAnimations; +using UnityEngine; + +[Serializable] +public class OffsetTypePowerEnum : PowerEnum +{ + public float GetOffset(CharData cData, IAnimationContext context) + { + if (!useCustom) return AnimationUtility.GetWaveOffset(cData, context, EnumValue); + + if (Value == null) return 0; + return Value.GetOffset(cData, context); + } +} \ No newline at end of file diff --git a/Package/Runtime/PowerEnum/OffsetTypePowerEnum.cs.meta b/Package/Runtime/PowerEnum/OffsetTypePowerEnum.cs.meta new file mode 100644 index 0000000..946576c --- /dev/null +++ b/Package/Runtime/PowerEnum/OffsetTypePowerEnum.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c291c3c22db57f0458970822b0e8ba18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Package/Runtime/PowerEnum/PowerEnum.cs b/Package/Runtime/PowerEnum/PowerEnum.cs new file mode 100644 index 0000000..a10a541 --- /dev/null +++ b/Package/Runtime/PowerEnum/PowerEnum.cs @@ -0,0 +1,13 @@ +using System; +using UnityEngine; + +[Serializable] +public abstract class PowerEnum where TEnum : Enum +{ + public TCustom Value => customValue; + public TEnum EnumValue => enumValue; + + [SerializeField] private TEnum enumValue; + [SerializeField] private TCustom customValue; + [SerializeField] protected bool useCustom; +} \ No newline at end of file diff --git a/Package/Runtime/PowerEnum/PowerEnum.cs.meta b/Package/Runtime/PowerEnum/PowerEnum.cs.meta new file mode 100644 index 0000000..1161850 --- /dev/null +++ b/Package/Runtime/PowerEnum/PowerEnum.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4328ca0ecad6752468a4e62833042bad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Package/Runtime/PowerEnum/TMPOffsetType.cs b/Package/Runtime/PowerEnum/TMPOffsetType.cs new file mode 100644 index 0000000..708e364 --- /dev/null +++ b/Package/Runtime/PowerEnum/TMPOffsetType.cs @@ -0,0 +1,12 @@ +using System.Collections; +using System.Collections.Generic; +using TMPEffects.CharacterData; +using TMPEffects.TMPAnimations; +using UnityEngine; + +public abstract class TMPOffsetType : MonoBehaviour +{ + // TODO What other params might make sense? + public abstract float GetOffset(CharData cData, IAnimationContext context); +} + diff --git a/Package/Runtime/PowerEnum/TMPOffsetType.cs.meta b/Package/Runtime/PowerEnum/TMPOffsetType.cs.meta new file mode 100644 index 0000000..c6baa5d --- /dev/null +++ b/Package/Runtime/PowerEnum/TMPOffsetType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27027e5aa6a41714f860bfc6e7fc8b34 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Package/Runtime/Timeline/TrackMixers/TMPMeshModifierTrackMixer.cs b/Package/Runtime/Timeline/TrackMixers/TMPMeshModifierTrackMixer.cs index 799d623..3c343b5 100644 --- a/Package/Runtime/Timeline/TrackMixers/TMPMeshModifierTrackMixer.cs +++ b/Package/Runtime/Timeline/TrackMixers/TMPMeshModifierTrackMixer.cs @@ -67,13 +67,13 @@ private void OnAnimatedCallback(CharData cdata) if (behaviour.Step.Step.entryDuration > 0 && currTime <= behaviour.Step.Step.entryDuration) { - weight = behaviour.Step.Step.entryCurve.Evaluate(currTime / behaviour.Step.Step.entryDuration); + weight = behaviour.Step.Step.entryCurve.Evaluate(cdata, animator.AnimatorContext, currTime / behaviour.Step.Step.entryDuration); } else if (behaviour.Step.Step.exitDuration > 0 && currTime >= duration - behaviour.Step.Step.exitDuration) { float preTime = duration - behaviour.Step.Step.exitDuration; - weight = behaviour.Step.Step.exitCurve.Evaluate(1f - (currTime - preTime) / + weight = behaviour.Step.Step.exitCurve.Evaluate(cdata, animator.AnimatorContext, 1f - (currTime - preTime) / behaviour.Step.Step.exitDuration); } diff --git a/Package/Tests/Timeline Tests/New Scene.unity b/Package/Tests/Timeline Tests/New Scene.unity index 5d60161..60498f9 100644 --- a/Package/Tests/Timeline Tests/New Scene.unity +++ b/Package/Tests/Timeline Tests/New Scene.unity @@ -229,6 +229,7 @@ GameObject: - component: {fileID: 409867538} - component: {fileID: 409867537} - component: {fileID: 409867536} + - component: {fileID: 409867539} m_Layer: 5 m_Name: Text (TMP) m_TagString: Untagged @@ -250,10 +251,10 @@ RectTransform: m_Children: [] m_Father: {fileID: 1994222726} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 200, y: 50} + m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &409867536 MonoBehaviour: @@ -291,7 +292,7 @@ MonoBehaviour: _serializedList: [] sceneHideAnimations: _serializedList: [] - preview: 0 + preview: 1 useDefaultDatabase: 1 initDatabase: 1 previewUpdatesPerSecond: 60 @@ -315,7 +316,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: New Text + m_text: Lorem ipsum dolor sit amet. m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} @@ -324,8 +325,8 @@ MonoBehaviour: m_fontMaterials: [] m_fontColor32: serializedVersion: 2 - rgba: 4294967295 - m_fontColor: {r: 1, g: 1, b: 1, a: 1} + rgba: 4278190080 + m_fontColor: {r: 0, g: 0, b: 0, a: 1} m_enableVertexGradient: 0 m_colorMode: 3 m_fontColorGradient: @@ -349,8 +350,8 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_HorizontalAlignment: 1 - m_VerticalAlignment: 256 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 m_textAlignment: 65535 m_characterSpacing: 0 m_wordSpacing: 0 @@ -392,6 +393,32 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 409867534} m_CullTransparentMesh: 1 +--- !u!320 &409867539 +PlayableDirector: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 409867534} + m_Enabled: 1 + serializedVersion: 3 + m_PlayableAsset: {fileID: 11400000, guid: 382de03df39e3e24bbf6adca2f12364a, type: 2} + m_InitialState: 1 + m_WrapMode: 2 + m_DirectorUpdateMode: 1 + m_InitialTime: 0 + m_SceneBindings: + - key: {fileID: 0} + value: {fileID: 409867536} + - key: {fileID: 0} + value: {fileID: 409867536} + - key: {fileID: 0} + value: {fileID: 409867536} + - key: {fileID: 0} + value: {fileID: 409867536} + m_ExposedReferences: + m_References: + - : {fileID: 409867539} --- !u!1 &874370643 GameObject: m_ObjectHideFlags: 0 diff --git a/Text (TMP)Timeline.playable b/Text (TMP)Timeline.playable new file mode 100644 index 0000000..b9d2c89 --- /dev/null +++ b/Text (TMP)Timeline.playable @@ -0,0 +1,1796 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8086330850660377698 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73fa5eac7a691b04692db83c6d3e95f3, type: 3} + m_Name: TMPMeshModifierClip + m_EditorClassIdentifier: + step: + Step: + name: + animate: 1 + entryCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.333333 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2.0000029 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.33333302 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + entryDuration: 2 + exitCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + exitDuration: 0 + extrapolateFrom: 0 + preExtrapolation: 0 + extrapolateUntil: 0 + postExtrapolation: 0 + loops: 0 + repetitions: 0 + useWave: 0 + waveOffsetType: 0 + wave: + upPeriod: 1 + downPeriod: 1 + amplitude: 1 + velocity: 1 + upwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + downwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + crestWait: 0 + troughWait: 0 + uniformity: 1 + startTime: 0 + duration: 2 + useInitialModifiers: 0 + initModifiers: + Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: [] + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + modifiers: + Position: + vector: {x: 0, y: 10, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: [] + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + lastMovedEntry: 0 +--- !u!114 &-7196443449792522250 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73fa5eac7a691b04692db83c6d3e95f3, type: 3} + m_Name: TMPMeshModifierClip + m_EditorClassIdentifier: + step: + Step: + name: + animate: 1 + entryCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.333334 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 2.9999938 + outSlope: 2.9999943 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.33333403 + outWeight: 0.33333397 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.33333397 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + entryDuration: 1 + exitCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + exitDuration: 0 + extrapolateFrom: 0 + preExtrapolation: 0 + extrapolateUntil: 0 + postExtrapolation: 0 + loops: 0 + repetitions: 0 + useWave: 0 + waveOffsetType: 0 + wave: + upPeriod: 1 + downPeriod: 1 + amplitude: 1 + velocity: 1 + upwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + downwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + crestWait: 0 + troughWait: 0 + uniformity: 1 + startTime: 2 + duration: 2.23 + useInitialModifiers: 1 + initModifiers: + Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: + - eulerAngles: {x: 0, y: 0, z: 45} + pivot: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + modifiers: + Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: + - eulerAngles: {x: 0, y: 0, z: 90} + pivot: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + lastMovedEntry: 0 +--- !u!114 &-6792738596265628115 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 904f8d22bfe6f2147af0c2edc5912739, type: 3} + m_Name: GenericExpors_Track0 + m_EditorClassIdentifier: + m_Version: 3 + m_AnimClip: {fileID: 0} + m_Locked: 0 + m_Muted: 0 + m_CustomPlayableFullTypename: + m_Curves: {fileID: 0} + m_Parent: {fileID: 3291300111273522079} + m_Children: [] + m_Clips: + - m_Version: 1 + m_Start: 0 + m_ClipIn: 0 + m_Asset: {fileID: -3550005046343328607} + m_Duration: 2 + m_TimeScale: 1 + m_ParentTrack: {fileID: -6792738596265628115} + m_EaseInDuration: 0 + m_EaseOutDuration: 0 + m_BlendInDuration: 0 + m_BlendOutDuration: 0 + m_MixInCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_MixOutCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BlendInCurveMode: 0 + m_BlendOutCurveMode: 0 + m_ExposedParameterNames: [] + m_AnimationCurves: {fileID: 0} + m_Recordable: 0 + m_PostExtrapolationMode: 0 + m_PreExtrapolationMode: 0 + m_PostExtrapolationTime: 0 + m_PreExtrapolationTime: 0 + m_DisplayName: TMPMeshModifierClip + - m_Version: 1 + m_Start: 2 + m_ClipIn: 0 + m_Asset: {fileID: -7196443449792522250} + m_Duration: 2.2300000190734863 + m_TimeScale: 1 + m_ParentTrack: {fileID: -6792738596265628115} + m_EaseInDuration: 0 + m_EaseOutDuration: 0 + m_BlendInDuration: 0 + m_BlendOutDuration: 0 + m_MixInCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_MixOutCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BlendInCurveMode: 0 + m_BlendOutCurveMode: 0 + m_ExposedParameterNames: [] + m_AnimationCurves: {fileID: 0} + m_Recordable: 0 + m_PostExtrapolationMode: 0 + m_PreExtrapolationMode: 0 + m_PostExtrapolationTime: Infinity + m_PreExtrapolationTime: 0 + m_DisplayName: TMPMeshModifierClip + m_Markers: + m_Objects: [] +--- !u!114 &-5486875541559576162 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73fa5eac7a691b04692db83c6d3e95f3, type: 3} + m_Name: TMPMeshModifierClip + m_EditorClassIdentifier: + step: + Step: + name: color + animate: 1 + entryCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.333333 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2.0000029 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.33333302 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + entryDuration: 2 + exitCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + exitDuration: 0 + extrapolateFrom: 0 + preExtrapolation: 0 + extrapolateUntil: 0 + postExtrapolation: 0 + loops: 0 + repetitions: 0 + useWave: 0 + waveOffsetType: 0 + wave: + upPeriod: 1 + downPeriod: 1 + amplitude: 1 + velocity: 1 + upwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + downwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + crestWait: 0 + troughWait: 0 + uniformity: 1 + startTime: 0 + duration: 4.23 + useInitialModifiers: 0 + initModifiers: + Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: [] + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + modifiers: + Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: [] + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 1 + Color: + serializedVersion: 2 + rgba: 144 + TL_Color: + Override: 1 + Color: + serializedVersion: 2 + rgba: 128 + TR_Color: + Override: 1 + Color: + serializedVersion: 2 + rgba: 128 + BR_Color: + Override: 1 + Color: + serializedVersion: 2 + rgba: 142 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + lastMovedEntry: 0 +--- !u!114 &-3550005046343328607 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73fa5eac7a691b04692db83c6d3e95f3, type: 3} + m_Name: TMPMeshModifierClip + m_EditorClassIdentifier: + step: + Step: + name: + animate: 1 + entryCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.013942428 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.434788 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 3.9858418 + outSlope: 3.985834 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.26909798 + outWeight: 0.26909804 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.013942499 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.434788 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + entryDuration: 1 + exitCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0.013942428 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.434788 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 3.9858418 + outSlope: 3.985834 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.26909798 + outWeight: 0.26909804 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0.013942499 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.434788 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + exitDuration: 0 + extrapolateFrom: 0 + preExtrapolation: 0 + extrapolateUntil: 0 + postExtrapolation: 0 + loops: 0 + repetitions: 0 + useWave: 0 + waveOffsetType: 0 + wave: + upPeriod: 1 + downPeriod: 1 + amplitude: 1 + velocity: 1 + upwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + downwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + crestWait: 0 + troughWait: 0 + uniformity: 1 + startTime: 0 + duration: 2 + useInitialModifiers: 0 + initModifiers: + Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: [] + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + modifiers: + Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: + - eulerAngles: {x: 0, y: 0, z: 45} + pivot: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + lastMovedEntry: 0 +--- !u!114 &-1735686229069779642 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dd98e6c9d6d2b4c4ab6eebbc5bdcad7b, type: 3} + m_Name: TMPAnimationClip + m_EditorClassIdentifier: + animation: {fileID: 11400000, guid: 506cb39d14ae32846b9f60dfd21d4bc0, type: 2} +--- !u!114 &-18508318200583952 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73fa5eac7a691b04692db83c6d3e95f3, type: 3} + m_Name: TMPMeshModifierClip + m_EditorClassIdentifier: + step: + Step: + name: + animate: 1 + entryCurve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + entryDuration: 0 + exitCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.333333 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 3.0000029 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.33333302 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + exitDuration: 2.23 + extrapolateFrom: 0 + preExtrapolation: 0 + extrapolateUntil: 0 + postExtrapolation: 0 + loops: 0 + repetitions: 0 + useWave: 0 + waveOffsetType: 0 + wave: + upPeriod: 1 + downPeriod: 1 + amplitude: 1 + velocity: 1 + upwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + downwardCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: -0.0012029491 + tangentMode: 0 + weightedMode: 3 + inWeight: 0 + outWeight: 0.36078 + - serializedVersion: 3 + time: 0.5 + value: 0.5 + inSlope: 1.5725082 + outSlope: 1.5733721 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.326514 + outWeight: 0.33093 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: -0.0009312395 + outSlope: 0 + tangentMode: 0 + weightedMode: 3 + inWeight: 0.358688 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + crestWait: 0 + troughWait: 0 + uniformity: 1 + startTime: 2 + duration: 2.23 + useInitialModifiers: 0 + initModifiers: + Position: + vector: {x: 0, y: 10, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: [] + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + modifiers: + Position: + vector: {x: 0, y: 10, z: 0} + type: 1 + Scale: {x: 1, y: 1, z: 1} + Rotations: [] + BL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_Position: + vector: {x: 0, y: 0, z: 0} + type: 1 + BL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TL_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + TR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BR_Color: + Override: 0 + Color: + serializedVersion: 2 + rgba: 0 + BL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TL_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + TR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + BR_UV0: + vector: {x: 0, y: 0, z: 0} + type: 1 + lastMovedEntry: 0 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bfda56da833e2384a9677cd3c976a436, type: 3} + m_Name: Text (TMP)Timeline + m_EditorClassIdentifier: + m_Version: 0 + m_Tracks: + - {fileID: 4125820161617895964} + - {fileID: 3291300111273522079} + m_FixedDuration: 0 + m_EditorSettings: + m_Framerate: 60 + m_ScenePreview: 1 + m_DurationMode: 0 + m_MarkerTrack: {fileID: 0} +--- !u!114 &1415575920826977158 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 904f8d22bfe6f2147af0c2edc5912739, type: 3} + m_Name: GenericExpors_Track1 + m_EditorClassIdentifier: + m_Version: 3 + m_AnimClip: {fileID: 0} + m_Locked: 0 + m_Muted: 0 + m_CustomPlayableFullTypename: + m_Curves: {fileID: 0} + m_Parent: {fileID: 3291300111273522079} + m_Children: [] + m_Clips: + - m_Version: 1 + m_Start: 0 + m_ClipIn: 0 + m_Asset: {fileID: -5486875541559576162} + m_Duration: 4.230000019073486 + m_TimeScale: 1 + m_ParentTrack: {fileID: 1415575920826977158} + m_EaseInDuration: 0 + m_EaseOutDuration: 0 + m_BlendInDuration: 0 + m_BlendOutDuration: 0 + m_MixInCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_MixOutCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BlendInCurveMode: 0 + m_BlendOutCurveMode: 0 + m_ExposedParameterNames: [] + m_AnimationCurves: {fileID: 0} + m_Recordable: 0 + m_PostExtrapolationMode: 0 + m_PreExtrapolationMode: 0 + m_PostExtrapolationTime: Infinity + m_PreExtrapolationTime: 0 + m_DisplayName: TMPMeshModifierClip + m_Markers: + m_Objects: [] +--- !u!114 &3291300111273522079 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0fc6f5187a81dc47999eefade6f0935, type: 3} + m_Name: GenericExpors + m_EditorClassIdentifier: + m_Version: 3 + m_AnimClip: {fileID: 0} + m_Locked: 0 + m_Muted: 0 + m_CustomPlayableFullTypename: + m_Curves: {fileID: 0} + m_Parent: {fileID: 11400000} + m_Children: + - {fileID: -6792738596265628115} + - {fileID: 1415575920826977158} + - {fileID: 5417730059831875644} + m_Clips: [] + m_Markers: + m_Objects: [] +--- !u!114 &4125820161617895964 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 16049b9e5ea2f4b4a91ba13fbfd74924, type: 3} + m_Name: TMP Animator Track + m_EditorClassIdentifier: + m_Version: 3 + m_AnimClip: {fileID: 0} + m_Locked: 0 + m_Muted: 1 + m_CustomPlayableFullTypename: + m_Curves: {fileID: 0} + m_Parent: {fileID: 11400000} + m_Children: [] + m_Clips: + - m_Version: 1 + m_Start: 4.316666666666666 + m_ClipIn: 0 + m_Asset: {fileID: -1735686229069779642} + m_Duration: 5 + m_TimeScale: 1 + m_ParentTrack: {fileID: 4125820161617895964} + m_EaseInDuration: 0 + m_EaseOutDuration: 0 + m_BlendInDuration: 0 + m_BlendOutDuration: 0 + m_MixInCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_MixOutCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BlendInCurveMode: 0 + m_BlendOutCurveMode: 0 + m_ExposedParameterNames: [] + m_AnimationCurves: {fileID: 0} + m_Recordable: 0 + m_PostExtrapolationMode: 0 + m_PreExtrapolationMode: 0 + m_PostExtrapolationTime: Infinity + m_PreExtrapolationTime: 4.316666666666666 + m_DisplayName: GenericExpors + m_Markers: + m_Objects: [] +--- !u!114 &5417730059831875644 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 904f8d22bfe6f2147af0c2edc5912739, type: 3} + m_Name: GenericExpors_Track2 + m_EditorClassIdentifier: + m_Version: 3 + m_AnimClip: {fileID: 0} + m_Locked: 0 + m_Muted: 0 + m_CustomPlayableFullTypename: + m_Curves: {fileID: 0} + m_Parent: {fileID: 3291300111273522079} + m_Children: [] + m_Clips: + - m_Version: 1 + m_Start: 0 + m_ClipIn: 0 + m_Asset: {fileID: -8086330850660377698} + m_Duration: 2 + m_TimeScale: 1 + m_ParentTrack: {fileID: 5417730059831875644} + m_EaseInDuration: 0 + m_EaseOutDuration: 0 + m_BlendInDuration: 0 + m_BlendOutDuration: 0 + m_MixInCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_MixOutCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BlendInCurveMode: 0 + m_BlendOutCurveMode: 0 + m_ExposedParameterNames: [] + m_AnimationCurves: {fileID: 0} + m_Recordable: 0 + m_PostExtrapolationMode: 0 + m_PreExtrapolationMode: 0 + m_PostExtrapolationTime: 0 + m_PreExtrapolationTime: 0 + m_DisplayName: TMPMeshModifierClip + - m_Version: 1 + m_Start: 2 + m_ClipIn: 0 + m_Asset: {fileID: -18508318200583952} + m_Duration: 2.2300000190734863 + m_TimeScale: 1 + m_ParentTrack: {fileID: 5417730059831875644} + m_EaseInDuration: 0 + m_EaseOutDuration: 0 + m_BlendInDuration: 0 + m_BlendOutDuration: 0 + m_MixInCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_MixOutCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BlendInCurveMode: 0 + m_BlendOutCurveMode: 0 + m_ExposedParameterNames: [] + m_AnimationCurves: {fileID: 0} + m_Recordable: 0 + m_PostExtrapolationMode: 0 + m_PreExtrapolationMode: 0 + m_PostExtrapolationTime: Infinity + m_PreExtrapolationTime: 0 + m_DisplayName: TMPMeshModifierClip + m_Markers: + m_Objects: [] diff --git a/new GenericAnimation 3.asset b/new GenericAnimation 3.asset index 6320f9e..a526a79 100644 --- a/new GenericAnimation 3.asset +++ b/new GenericAnimation 3.asset @@ -12,27 +12,14 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7f88d8a32ae6922429db0f721f9bcced, type: 3} m_Name: new GenericAnimation 3 m_EditorClassIdentifier: - MyTrack: - Clips: [] Tracks: Tracks: - Clips: - - rid: 3184737065292005551 - - Clips: - - rid: 3184737065292005549 - - rid: 3184737065292005550 - - rid: 3184737065292005552 - - rid: 3184737065292005553 - - rid: 3184737065292005554 - - Clips: [] - - Clips: - - rid: 3184737065292005558 + - rid: 3184737065292005568 animationSteps: - rid: 3184737065292005544 - animationSteps2: - - rid: 3184737065292005545 - repeat: 0 - duration: 0 + repeat: 1 + duration: 1 references: version: 2 RefIds: @@ -240,214 +227,10 @@ MonoBehaviour: BR_UV0: vector: {x: 0, y: 0, z: 0} type: 1 - - rid: 3184737065292005545 - type: {class: AnimationStep, ns: , asm: TMPEffects} - data: - name: - animate: 1 - entryCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - entryDuration: 0 - exitCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - exitDuration: 0 - extrapolateFrom: 0 - preExtrapolation: 0 - extrapolateUntil: 0 - postExtrapolation: 0 - loops: 0 - repetitions: 0 - useWave: 0 - waveOffsetType: 0 - wave: - upPeriod: 1 - downPeriod: 1 - amplitude: 1 - velocity: 1 - upwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - downwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - crestWait: 0 - troughWait: 0 - uniformity: 1 - startTime: 0 - duration: 0 - useInitialModifiers: 0 - initModifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - modifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - - rid: 3184737065292005549 + - rid: 3184737065292005568 type: {class: AnimationStep, ns: , asm: TMPEffects} data: - name: + name: Okaythen animate: 1 entryCurve: serializedVersion: 2 @@ -467,1231 +250,7 @@ MonoBehaviour: preExtrapolation: 0 extrapolateUntil: 0 postExtrapolation: 0 - loops: 0 - repetitions: 0 - useWave: 0 - waveOffsetType: 0 - wave: - upPeriod: 1 - downPeriod: 1 - amplitude: 1 - velocity: 1 - upwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - downwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - crestWait: 0 - troughWait: 0 - uniformity: 1 - startTime: 2.78 - duration: 2.95 - useInitialModifiers: 0 - initModifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - modifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - - rid: 3184737065292005550 - type: {class: AnimationStep, ns: , asm: TMPEffects} - data: - name: - animate: 1 - entryCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - entryDuration: 0 - exitCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - exitDuration: 0 - extrapolateFrom: 0 - preExtrapolation: 0 - extrapolateUntil: 0 - postExtrapolation: 0 - loops: 0 - repetitions: 0 - useWave: 0 - waveOffsetType: 0 - wave: - upPeriod: 1 - downPeriod: 1 - amplitude: 1 - velocity: 1 - upwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - downwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - crestWait: 0 - troughWait: 0 - uniformity: 1 - startTime: 1 - duration: 1.73 - useInitialModifiers: 0 - initModifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - modifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - - rid: 3184737065292005551 - type: {class: AnimationStep, ns: , asm: TMPEffects} - data: - name: - animate: 1 - entryCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - entryDuration: 0 - exitCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - exitDuration: 0 - extrapolateFrom: 0 - preExtrapolation: 0 - extrapolateUntil: 0 - postExtrapolation: 0 - loops: 0 - repetitions: 0 - useWave: 0 - waveOffsetType: 0 - wave: - upPeriod: 1 - downPeriod: 1 - amplitude: 1 - velocity: 1 - upwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - downwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - crestWait: 0 - troughWait: 0 - uniformity: 1 - startTime: 5 - duration: 3 - useInitialModifiers: 0 - initModifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - modifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - - rid: 3184737065292005552 - type: {class: AnimationStep, ns: , asm: TMPEffects} - data: - name: - animate: 1 - entryCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - entryDuration: 0 - exitCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - exitDuration: 0 - extrapolateFrom: 0 - preExtrapolation: 0 - extrapolateUntil: 0 - postExtrapolation: 0 - loops: 0 - repetitions: 0 - useWave: 0 - waveOffsetType: 0 - wave: - upPeriod: 1 - downPeriod: 1 - amplitude: 1 - velocity: 1 - upwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - downwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - crestWait: 0 - troughWait: 0 - uniformity: 1 - startTime: 0 - duration: 0 - useInitialModifiers: 0 - initModifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - modifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - - rid: 3184737065292005553 - type: {class: AnimationStep, ns: , asm: TMPEffects} - data: - name: - animate: 1 - entryCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - entryDuration: 0 - exitCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - exitDuration: 0 - extrapolateFrom: 0 - preExtrapolation: 0 - extrapolateUntil: 0 - postExtrapolation: 0 - loops: 0 - repetitions: 0 - useWave: 0 - waveOffsetType: 0 - wave: - upPeriod: 1 - downPeriod: 1 - amplitude: 1 - velocity: 1 - upwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - downwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - crestWait: 0 - troughWait: 0 - uniformity: 1 - startTime: 0 - duration: 0 - useInitialModifiers: 0 - initModifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - modifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - - rid: 3184737065292005554 - type: {class: AnimationStep, ns: , asm: TMPEffects} - data: - name: - animate: 1 - entryCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - entryDuration: 0 - exitCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - exitDuration: 0 - extrapolateFrom: 0 - preExtrapolation: 0 - extrapolateUntil: 0 - postExtrapolation: 0 - loops: 0 - repetitions: 0 - useWave: 0 - waveOffsetType: 0 - wave: - upPeriod: 1 - downPeriod: 1 - amplitude: 1 - velocity: 1 - upwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - downwardCurve: - serializedVersion: 2 - m_Curve: - - serializedVersion: 3 - time: 0 - value: 0 - inSlope: 0 - outSlope: -0.0012029491 - tangentMode: 0 - weightedMode: 3 - inWeight: 0 - outWeight: 0.36078 - - serializedVersion: 3 - time: 0.5 - value: 0.5 - inSlope: 1.5725082 - outSlope: 1.5733721 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.326514 - outWeight: 0.33093 - - serializedVersion: 3 - time: 1 - value: 1 - inSlope: -0.0009312395 - outSlope: 0 - tangentMode: 0 - weightedMode: 3 - inWeight: 0.358688 - outWeight: 0 - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - crestWait: 0 - troughWait: 0 - uniformity: 1 - startTime: 0 - duration: 0 - useInitialModifiers: 0 - initModifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - modifiers: - Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - Scale: {x: 1, y: 1, z: 1} - Rotations: [] - BL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_Position: - vector: {x: 0, y: 0, z: 0} - type: 1 - BL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TL_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - TR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BR_Color: - Override: 0 - Color: - serializedVersion: 2 - rgba: 0 - BL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TL_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - TR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - BR_UV0: - vector: {x: 0, y: 0, z: 0} - type: 1 - - rid: 3184737065292005558 - type: {class: AnimationStep, ns: , asm: TMPEffects} - data: - name: - animate: 1 - entryCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - entryDuration: 0 - exitCurve: - serializedVersion: 2 - m_Curve: [] - m_PreInfinity: 2 - m_PostInfinity: 2 - m_RotationOrder: 4 - exitDuration: 0 - extrapolateFrom: 0 - preExtrapolation: 0 - extrapolateUntil: 0 - postExtrapolation: 1 - loops: 0 + loops: 1 repetitions: 0 useWave: 0 waveOffsetType: 0