diff --git a/CHANGELOG.md b/CHANGELOG.md index dcff5c1..b721cdf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [0.3.3] – 2022-10-16 + +### Added +- Int Transitions +- Enum Transitions + +### Fixed +- Fix AnimationParameterAsset hash calculation when using strings +- Fixed bug where StateMachine would not update during AnimationState transition +- Fix bug where LinearBlend and SingleStates would reference wrong AnimationState in StateMachine (fix at UpdateStateMachineJob.CreateState) + ## [0.3.2] – 2022-9-18 ### Added diff --git a/Editor/EditorPreview/PlayableGraphPreview.cs b/Editor/EditorPreview/PlayableGraphPreview.cs index b7b426e..7b6d5ec 100644 --- a/Editor/EditorPreview/PlayableGraphPreview.cs +++ b/Editor/EditorPreview/PlayableGraphPreview.cs @@ -207,8 +207,12 @@ public void DrawPreview(Rect r, GUIStyle background) } } - private void HandleCamera(Boolean force = false) + private void HandleCamera(bool force = false) { + if (Event.current == null) + { + return; + } // must set hotControl or MouseUp event will not be detected outside window int controlId = GUIUtility.GetControlID(FocusType.Passive); if (Event.current.GetTypeForControl(controlId) == EventType.MouseDown) diff --git a/Editor/EditorWindows/ParametersInspector.cs b/Editor/EditorWindows/ParametersInspector.cs index 2d595a5..3b72830 100644 --- a/Editor/EditorWindows/ParametersInspector.cs +++ b/Editor/EditorWindows/ParametersInspector.cs @@ -33,7 +33,9 @@ public override void OnInspectorGUI() { var menu = new GenericMenu(); menu.AddItem(new GUIContent("Boolean"), false, CreateParameter); + menu.AddItem(new GUIContent("Integer"), false, CreateParameter); menu.AddItem(new GUIContent("Float"), false, CreateParameter); + menu.AddItem(new GUIContent("Enum"), false, CreateParameter); menu.DropDown(rect); } } diff --git a/Editor/PropertyDrawers/AnimationParameterPropertyDrawer.cs b/Editor/PropertyDrawers/AnimationParameterPropertyDrawer.cs index b02b93d..e0e8cb2 100644 --- a/Editor/PropertyDrawers/AnimationParameterPropertyDrawer.cs +++ b/Editor/PropertyDrawers/AnimationParameterPropertyDrawer.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using DMotion.Authoring; using UnityEditor; using UnityEngine; @@ -8,6 +9,13 @@ namespace DMotion.Editor [CustomPropertyDrawer(typeof(AnimationParameterAsset))] internal class AnimationParameterPropertyDrawer : PropertyDrawer { + private EnumTypePopupSelector enumTypePopupSelector; + + public AnimationParameterPropertyDrawer() + { + enumTypePopupSelector = new EnumTypePopupSelector(); + } + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { var parameterAsset = property.objectReferenceValue as AnimationParameterAsset; @@ -15,44 +23,55 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten { using (var c = new EditorGUI.ChangeCheckScope()) { - var labelRect = position; - labelRect.width = EditorGUIUtility.labelWidth; - parameterAsset.name = EditorGUI.TextField(labelRect, parameterAsset.name); + var labelWidth = EditorGUIUtility.labelWidth; + var deleteButtonWidth = EditorGUIUtility.singleLineHeight; + var typeWidth = position.width - labelWidth - deleteButtonWidth; + var rects = position.HorizontalLayout(labelWidth, typeWidth, deleteButtonWidth).ToArray(); - if (c.changed) + //label { - EditorUtility.SetDirty(parameterAsset); + var newName = EditorGUI.DelayedTextField(rects[0], parameterAsset.name); + + if (newName != parameterAsset.name) + { + parameterAsset.name = newName; + EditorUtility.SetDirty(parameterAsset); + AssetDatabase.SaveAssetIfDirty(parameterAsset); + AssetDatabase.Refresh(); + } } - - var deleteButtonRect = position; - deleteButtonRect.xMin = deleteButtonRect.xMax - EditorGUIUtility.singleLineHeight; - if (GUI.Button(deleteButtonRect, "-")) + + //type { - var stateMachine = property.serializedObject.targetObject as StateMachineAsset; - stateMachine.DeleteParameter(parameterAsset); - property.serializedObject.ApplyModifiedProperties(); - property.serializedObject.Update(); + if (parameterAsset is EnumParameterAsset enumParameterAsset) + { + enumTypePopupSelector.DrawSelectionPopup(rects[1], + GUIContent.none, + enumParameterAsset.EnumType.Type, + newType => + { + enumParameterAsset.EnumType.Type = newType; + EditorUtility.SetDirty(enumParameterAsset); + }); + } + else + { + EditorGUI.LabelField(rects[1], $"({parameterAsset.ParameterTypeName})"); + } } - var typeRect = position; - typeRect.xMax -= deleteButtonRect.width - EditorGUIUtility.standardVerticalSpacing; - typeRect.xMin += labelRect.width + EditorGUIUtility.standardVerticalSpacing*3; - EditorGUI.LabelField(typeRect, $"({GetParameterTypeName(parameterAsset)})"); + //delete + { + if (GUI.Button(rects[2], "-")) + { + var stateMachine = property.serializedObject.targetObject as StateMachineAsset; + stateMachine.DeleteParameter(parameterAsset); + property.serializedObject.ApplyModifiedProperties(); + property.serializedObject.Update(); + } + } } } } - - private string GetParameterTypeName(AnimationParameterAsset parameterAsset) - { - switch (parameterAsset) - { - case BoolParameterAsset _: - return "Boolean"; - case FloatParameterAsset _: - return "Float"; - default: - throw new ArgumentOutOfRangeException(nameof(parameterAsset)); - } - } } } \ No newline at end of file diff --git a/Editor/PropertyDrawers/EditorGUIUtils.cs b/Editor/PropertyDrawers/EditorGUIUtils.cs new file mode 100644 index 0000000..6043ae5 --- /dev/null +++ b/Editor/PropertyDrawers/EditorGUIUtils.cs @@ -0,0 +1,37 @@ +using UnityEngine; +using System; +using UnityEditor; + +namespace DMotion.Editor +{ + public static class EditorGUIUtils + { + public static int GenericEnumPopup(Rect r, Type enumType, int current) + { + if (enumType is { IsEnum: true }) + { + var enumValue = (Enum) Enum.GetValues(enumType).GetValue(current); + return (int) (object)EditorGUI.EnumPopup(r, enumValue); + } + else + { + EditorGUI.LabelField(r, "Invalid type"); + return -1; + } + } + + // ScriptAttributeUtility.GetFieldInfoFromProperty(property, out type); + // if (type != (System.Type) null && type.IsEnum) + // { + // EditorGUI.BeginChangeCheck(); + // int num = EditorGUI.EnumNamesCache.IsEnumTypeUsingFlagsAttribute(type) ? EditorGUI.EnumFlagsField(position, label, property.intValue, type, false, EditorStyles.popup) : EditorGUI.EnumPopupInternal(position, label, property.intValue, type, (Func) null, false, EditorStyles.popup); + // if (!EditorGUI.EndChangeCheck()) + // return; + // System.Type enumUnderlyingType = type.GetEnumUnderlyingType(); + // if (num < 0 && (enumUnderlyingType == typeof (uint) || enumUnderlyingType == typeof (ushort) || enumUnderlyingType == typeof (byte))) + // property.longValue = (long) (uint) num; + // else + // property.intValue = num; + // } + } +} \ No newline at end of file diff --git a/Editor/PropertyDrawers/EditorGUIUtils.cs.meta b/Editor/PropertyDrawers/EditorGUIUtils.cs.meta new file mode 100644 index 0000000..697de23 --- /dev/null +++ b/Editor/PropertyDrawers/EditorGUIUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 48e905e6607f4d8f8708423f8f57e0d1 +timeCreated: 1665636270 \ No newline at end of file diff --git a/Editor/PropertyDrawers/EditorLayoutUtils.cs b/Editor/PropertyDrawers/EditorLayoutUtils.cs new file mode 100644 index 0000000..2693a2f --- /dev/null +++ b/Editor/PropertyDrawers/EditorLayoutUtils.cs @@ -0,0 +1,38 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace DMotion.Editor +{ + public static class EditorLayoutUtils + { + public static IEnumerable HorizontalLayout(this Rect r, params float[] widths) + { + if (widths.Length == 0) + { + yield return r; + } + + //normalize widths + var sumWidths = widths.Sum(); + for (var i = 0; i < widths.Length; i++) + { + widths[i] /= sumWidths; + } + + var spacing = EditorGUIUtility.standardVerticalSpacing; + var current = r; + current.width = r.width * widths[0]; + yield return current; + for (var i = 1; i < widths.Length; i++) + { + var w = r.width* widths[i]; + var prevW = r.width * widths[i - 1]; + current.x += prevW + spacing; + current.width = w - spacing; + yield return current; + } + } + } +} \ No newline at end of file diff --git a/Editor/PropertyDrawers/EditorLayoutUtils.cs.meta b/Editor/PropertyDrawers/EditorLayoutUtils.cs.meta new file mode 100644 index 0000000..a9ff33d --- /dev/null +++ b/Editor/PropertyDrawers/EditorLayoutUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2c91a16643bd4cc9bdebc71da7a3fc1a +timeCreated: 1665545144 \ No newline at end of file diff --git a/Editor/PropertyDrawers/EditorSerializationUtils.cs b/Editor/PropertyDrawers/EditorSerializationUtils.cs new file mode 100644 index 0000000..3cd5df6 --- /dev/null +++ b/Editor/PropertyDrawers/EditorSerializationUtils.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; + +namespace DMotion.Editor +{ + public static class EditorSerializationUtils + { + private const BindingFlags AllBindingFlags = (BindingFlags)(-1); + + public static TAttribute GetAttribute(this SerializedProperty serializedProperty, + bool inherit = true) + where TAttribute : Attribute + { + if (serializedProperty == null) + { + throw new ArgumentNullException(nameof(serializedProperty)); + } + + var targetObjectType = serializedProperty.serializedObject.targetObject.GetType(); + + if (targetObjectType == null) + { + throw new ArgumentException($"Could not find the {nameof(targetObjectType)} of {nameof(serializedProperty)}"); + } + + foreach (var pathSegment in serializedProperty.propertyPath.Split('.')) + { + var fieldInfo = targetObjectType.GetField(pathSegment, AllBindingFlags); + if (fieldInfo != null) + { + return fieldInfo.GetCustomAttribute(inherit); + } + + var propertyInfo = targetObjectType.GetProperty(pathSegment, AllBindingFlags); + if (propertyInfo != null) + { + return propertyInfo.GetCustomAttribute(inherit); + } + } + + throw new ArgumentException($"Could not find the field or property of {nameof(serializedProperty)}"); + } + public static IEnumerable GetAttributes(this SerializedProperty serializedProperty, bool inherit = true) + where TAttribute : Attribute + { + if (serializedProperty == null) + { + throw new ArgumentNullException(nameof(serializedProperty)); + } + + var targetObjectType = serializedProperty.serializedObject.targetObject.GetType(); + + if (targetObjectType == null) + { + throw new ArgumentException($"Could not find the {nameof(targetObjectType)} of {nameof(serializedProperty)}"); + } + + foreach (var pathSegment in serializedProperty.propertyPath.Split('.')) + { + var fieldInfo = targetObjectType.GetField(pathSegment, AllBindingFlags); + if (fieldInfo != null) + { + return fieldInfo.GetCustomAttributes(inherit); + } + + var propertyInfo = targetObjectType.GetProperty(pathSegment, AllBindingFlags); + if (propertyInfo != null) + { + return propertyInfo.GetCustomAttributes(inherit); + } + } + + throw new ArgumentException($"Could not find the field or property of {nameof(serializedProperty)}"); + } + } +} \ No newline at end of file diff --git a/Editor/PropertyDrawers/EditorSerializationUtils.cs.meta b/Editor/PropertyDrawers/EditorSerializationUtils.cs.meta new file mode 100644 index 0000000..4040a77 --- /dev/null +++ b/Editor/PropertyDrawers/EditorSerializationUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bad424b50ff646e3b4a86f5b377e5659 +timeCreated: 1665943830 \ No newline at end of file diff --git a/Editor/PropertyDrawers/ObjectReferencePopupSelector.cs b/Editor/PropertyDrawers/ObjectReferencePopupSelector.cs index 9b2f23a..3b44c46 100644 --- a/Editor/PropertyDrawers/ObjectReferencePopupSelector.cs +++ b/Editor/PropertyDrawers/ObjectReferencePopupSelector.cs @@ -19,12 +19,12 @@ internal class SubAssetReferencePopupSelector : ObjectReferencePopupSelector< where T : Object { private Object target; - private Type filterType; + private Type[] filterTypes; - internal SubAssetReferencePopupSelector(Object target, Type filterType = null) + internal SubAssetReferencePopupSelector(Object target, params Type[] filterTypes) { this.target = target; - this.filterType = filterType; + this.filterTypes = filterTypes; } protected override T[] CollectOptions() @@ -32,9 +32,9 @@ protected override T[] CollectOptions() var childs = AssetDatabase.LoadAllAssetRepresentationsAtPath(AssetDatabase.GetAssetPath(target)) .OfType(); - if (filterType != null) + if (filterTypes != null && filterTypes.Length > 0) { - childs = childs.Where(filterType.IsInstanceOfType); + childs = childs.Where(t => filterTypes.Any(f => f.IsInstanceOfType(t))); } return childs.ToArray(); @@ -48,30 +48,30 @@ internal class ObjectReferencePopupSelector internal class ObjectReferencePopupSelector : ObjectReferencePopupSelector where T : Object { - private T[] allEventNameAssets; - private string[] allEventNameOptions; - private T[] EventNameAssets + private T[] allAssets; + private string[] allAssetNameOptions; + private T[] Assets { get { - if (allEventNameAssets == null || IsDirty) + if (allAssets == null || IsDirty) { - allEventNameAssets = CollectOptions(); + allAssets = CollectOptions(); } - return allEventNameAssets; + return allAssets; } } - private string[] EventNameOptions + private string[] AssetNameOptions { get { - if (allEventNameOptions == null || IsDirty) + if (allAssetNameOptions == null || IsDirty) { - allEventNameOptions = EventNameAssets.Select(e => e.name).ToArray(); + allAssetNameOptions = Assets.Select(e => e.name).ToArray(); } - return allEventNameOptions; + return allAssetNameOptions; } } @@ -98,11 +98,11 @@ internal void OnGUI(Rect position, SerializedProperty property, GUIContent label } var currEventName = property.objectReferenceValue as T; - var index = Array.FindIndex(EventNameAssets, e => e == currEventName); - var newIndex = EditorGUI.Popup(position, index, EventNameOptions); + var index = Array.FindIndex(Assets, e => e == currEventName); + var newIndex = EditorGUI.Popup(position, index, AssetNameOptions); if (index != newIndex) { - property.objectReferenceValue = EventNameAssets[newIndex]; + property.objectReferenceValue = Assets[newIndex]; } IsDirty = false; diff --git a/Editor/PropertyDrawers/SelectSerializableTypePopup.cs b/Editor/PropertyDrawers/SelectSerializableTypePopup.cs new file mode 100644 index 0000000..2fe9cde --- /dev/null +++ b/Editor/PropertyDrawers/SelectSerializableTypePopup.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEditor.Search; +using UnityEngine; + +namespace DMotion.Editor +{ + public class SelectSerializableTypePopup : EditorWindow + { + private Type[] types = new Type[0]; + private GUIContent[] typeNames = new GUIContent[0]; + private string searchString = ""; + + private static HashSet invalidAssemblies; + + private Vector2 scrollPos; + + private Type baseType; + private Action onSelected; + private Predicate filter; + + public void Show(Type currentType, Type baseType, Action onSelected, Predicate filter) + { + if (baseType == null) + { + baseType = typeof(object); + } + + this.baseType = baseType; + this.onSelected = onSelected; + this.filter = filter; + + if (currentType != null) + { + searchString = currentType.Name; + } + + UpdateTypes(); + + base.Show(); + } + + [UnityEditor.Callbacks.DidReloadScripts] + private static void RefreshInvalidAssemblies() + { + invalidAssemblies = AppDomain.CurrentDomain + .GetAssemblies() + .Where(a => + a.FullName.StartsWith("System.", true, CultureInfo.CurrentCulture) || + a.FullName.StartsWith("Unity.", true, CultureInfo.CurrentCulture) || + a.FullName.StartsWith("com.unity", true, CultureInfo.CurrentCulture) || + a.FullName.StartsWith("Microsoft") || + a.FullName.StartsWith("Mono")).ToHashSet(); + } + + private void OnGUI() + { + using (new EditorGUILayout.VerticalScope()) + { + DrawSearchField(); + DrawOptions(); + } + } + + int selected = -1; + + private void DrawOptions() + { + using (var scrollView = new EditorGUILayout.ScrollViewScope(scrollPos)) + { + using (new EditorGUILayout.VerticalScope()) + { + var prevSelected = selected; + selected = GUILayout.SelectionGrid(selected, typeNames, 1); + if (selected != prevSelected) + { + var selectedType = types[selected]; + onSelected?.Invoke(selectedType); + Close(); + } + } + + scrollPos = scrollView.scrollPosition; + } + } + + private void DrawSearchField() + { + var prev = searchString; + searchString = EditorGUILayout.TextField(searchString, EditorStyles.toolbarSearchField); + if (prev != searchString) + { + UpdateTypes(); + } + } + + private void UpdateTypes() + { + types = TypeCache.GetTypesDerivedFrom(baseType) + .Where(t => IsValidType(t) && MatchesSearch(t)) + .OrderBy(t => t.FullName) + .ToArray(); + + typeNames = types.Select(t => new GUIContent(t.Name)).ToArray(); + } + + private bool IsValidType(Type t) + { + var passesFilter = filter == null || filter(t); + if (passesFilter) + { + return !invalidAssemblies.Contains(t.Assembly); + } + return false; + } + + private bool MatchesSearch(Type t) + { + long score = 0; + return FuzzySearch.FuzzyMatch(searchString, t.FullName, ref score); + } + } +} \ No newline at end of file diff --git a/Editor/PropertyDrawers/SelectSerializableTypePopup.cs.meta b/Editor/PropertyDrawers/SelectSerializableTypePopup.cs.meta new file mode 100644 index 0000000..37f63ed --- /dev/null +++ b/Editor/PropertyDrawers/SelectSerializableTypePopup.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 45a0b15b6d9c4ba0acd2bb055e26b619 +timeCreated: 1665944719 \ No newline at end of file diff --git a/Editor/PropertyDrawers/SerializableTypePropertyDrawer.cs b/Editor/PropertyDrawers/SerializableTypePropertyDrawer.cs new file mode 100644 index 0000000..45221d5 --- /dev/null +++ b/Editor/PropertyDrawers/SerializableTypePropertyDrawer.cs @@ -0,0 +1,38 @@ +using System; +using DMotion.Authoring; +using UnityEditor; +using UnityEngine; + +namespace DMotion.Editor +{ + [CustomPropertyDrawer(typeof(SerializableType))] + internal class SerializableTypePropertyDrawer : PropertyDrawer + { + private TypePopupSelector typePopupSelector; + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + if (typePopupSelector == null) + { + if (property.GetAttribute() != null) + { + typePopupSelector = new EnumTypePopupSelector(); + } + else + { + typePopupSelector = new TypePopupSelector(); + } + } + + var typeNameProperty = property.FindPropertyRelative(nameof(SerializableType.AssemblyQualifiedTypeName)); + var currentType = string.IsNullOrEmpty(typeNameProperty.stringValue) + ? null + : Type.GetType(typeNameProperty.stringValue); + typePopupSelector.DrawSelectionPopup(position, label, currentType, + newType => + { + typeNameProperty.stringValue = newType != null ? newType.AssemblyQualifiedName : ""; + typeNameProperty.serializedObject.ApplyModifiedProperties(); + }); + } + } +} \ No newline at end of file diff --git a/Editor/PropertyDrawers/SerializableTypePropertyDrawer.cs.meta b/Editor/PropertyDrawers/SerializableTypePropertyDrawer.cs.meta new file mode 100644 index 0000000..e85ed01 --- /dev/null +++ b/Editor/PropertyDrawers/SerializableTypePropertyDrawer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c53789080c47469c869c95dccf0243c6 +timeCreated: 1665942844 \ No newline at end of file diff --git a/Editor/PropertyDrawers/TransitionConditionPropertyDrawer.cs b/Editor/PropertyDrawers/TransitionConditionPropertyDrawer.cs index ce02d07..1c1aa94 100644 --- a/Editor/PropertyDrawers/TransitionConditionPropertyDrawer.cs +++ b/Editor/PropertyDrawers/TransitionConditionPropertyDrawer.cs @@ -1,29 +1,30 @@ using System; +using System.Linq; using DMotion.Authoring; using UnityEditor; using UnityEngine; namespace DMotion.Editor { - internal enum BoolConditionModes - { - True, - False - } - [CustomPropertyDrawer(typeof(TransitionCondition))] internal class TransitionConditionPropertyDrawer : PropertyDrawer { private ObjectReferencePopupSelector parameterPopupSelector; + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { if (parameterPopupSelector == null) { - parameterPopupSelector = new SubAssetReferencePopupSelector(property.serializedObject.targetObject, typeof(BoolParameterAsset)); + parameterPopupSelector = + new SubAssetReferencePopupSelector(property.serializedObject.targetObject, + typeof(BoolParameterAsset), + typeof(IntParameterAsset)); } + var parameterProperty = property.FindPropertyRelative(nameof(TransitionCondition.Parameter)); var comparisonValueProperty = property.FindPropertyRelative(nameof(TransitionCondition.ComparisonValue)); var comparisonModeProperty = property.FindPropertyRelative(nameof(TransitionCondition.ComparisonMode)); + if (parameterProperty.objectReferenceValue == null) { parameterPopupSelector.OnGUI(position, parameterProperty, GUIContent.none); @@ -33,25 +34,72 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten var parameterAsset = (AnimationParameterAsset)parameterProperty.objectReferenceValue; switch (parameterAsset) { - case BoolParameterAsset boolParameterAsset: - var labelRect = position; - labelRect.width *= 0.7f; - parameterPopupSelector.OnGUI(labelRect, parameterProperty, GUIContent.none); - - var comparisonModeRect = position; - comparisonModeRect.xMin += labelRect.width + EditorGUIUtility.standardVerticalSpacing; - var enumValue = (BoolConditionModes) EditorGUI.EnumPopup(comparisonModeRect, (BoolConditionModes)comparisonModeProperty.intValue); - comparisonModeProperty.intValue = (int)enumValue; - comparisonValueProperty.floatValue = enumValue == BoolConditionModes.True ? 1 : 0; + case BoolParameterAsset: + DrawBoolTransitionCondition(position, parameterProperty, + comparisonValueProperty, + comparisonModeProperty); + break; + case EnumParameterAsset enumParameterAsset: + DrawEnumTransitionCondition(position, enumParameterAsset, parameterProperty, + comparisonValueProperty, comparisonModeProperty); + break; + case IntParameterAsset: + DrawIntegerTransitionCondition(position, parameterProperty, comparisonValueProperty, + comparisonModeProperty); break; case FloatParameterAsset floatParameterAsset: - //Float transitions not supported + //Float transitions not supported default: throw new ArgumentOutOfRangeException(nameof(parameterAsset)); } } } + private void DrawBoolTransitionCondition(Rect position, SerializedProperty parameterProperty, + SerializedProperty comparisonValueProperty, + SerializedProperty comparisonModeProperty) + { + var rects = position.HorizontalLayout(0.7f, 0.3f).ToArray(); + parameterPopupSelector.OnGUI(rects[0], parameterProperty, GUIContent.none); + + var enumValue = (BoolConditionComparison)EditorGUI.EnumPopup(rects[1], + (BoolConditionComparison)comparisonModeProperty.intValue); + comparisonModeProperty.intValue = (int)enumValue; + comparisonValueProperty.floatValue = enumValue == BoolConditionComparison.True ? 1 : 0; + } + + private void DrawIntegerTransitionCondition(Rect position, SerializedProperty parameterProperty, + SerializedProperty comparisonValueProperty, + SerializedProperty comparisonModeProperty) + { + var rects = position.HorizontalLayout(0.4f, 0.4f, 0.2f).ToArray(); + parameterPopupSelector.OnGUI(rects[0], parameterProperty, GUIContent.none); + + var enumValue = (IntConditionComparison)EditorGUI.EnumPopup(rects[1], + (IntConditionComparison)comparisonModeProperty.intValue); + comparisonModeProperty.intValue = (int)enumValue; + + comparisonValueProperty.floatValue = + EditorGUI.IntField(rects[2], GUIContent.none, (int)comparisonValueProperty.floatValue); + } + + private void DrawEnumTransitionCondition(Rect position, + EnumParameterAsset enumParameterAsset, + SerializedProperty parameterProperty, + SerializedProperty comparisonValueProperty, + SerializedProperty comparisonModeProperty) + { + var rects = position.HorizontalLayout(0.3f, 0.2f, 0.3f).ToArray(); + parameterPopupSelector.OnGUI(rects[0], parameterProperty, GUIContent.none); + + var comparisonEnumValue = (IntConditionComparison)EditorGUI.EnumPopup(rects[1], + (IntConditionComparison)comparisonModeProperty.intValue); + comparisonModeProperty.intValue = (int)comparisonEnumValue; + + comparisonValueProperty.floatValue = EditorGUIUtils.GenericEnumPopup(rects[2], enumParameterAsset.EnumType.Type, + (int)comparisonValueProperty.floatValue); + } + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { return EditorGUIUtility.singleLineHeight; diff --git a/Editor/PropertyDrawers/TypePopupSelector.cs b/Editor/PropertyDrawers/TypePopupSelector.cs new file mode 100644 index 0000000..d17e7d5 --- /dev/null +++ b/Editor/PropertyDrawers/TypePopupSelector.cs @@ -0,0 +1,51 @@ +using System; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace DMotion.Editor +{ + internal class EnumTypePopupSelector : TypePopupSelector + { + protected override bool TypeFilter(Type t) + { + return t != null && t.IsEnum; + } + } + + internal class TypePopupSelector + { + private Type filterType; + protected virtual bool TypeFilter(Type t) + { + return filterType.IsAssignableFrom(t); + } + + internal void DrawSelectionPopup(Rect position, GUIContent label, Type selected, Action onSelected) + { + if (label != GUIContent.none) + { + var prevXMax = position.xMax; + position.width = EditorGUIUtility.labelWidth; + + EditorGUI.LabelField(position, label); + position.xMin += EditorGUIUtility.labelWidth; + + position.xMax = prevXMax; + } + + var selectedName = selected != null ? selected.Name : "NONE"; + if (EditorGUI.DropdownButton(position, new GUIContent(selectedName), FocusType.Passive)) + { + var rect = position; + rect.height = 400; + rect.width = 250; + rect = GUIUtility.GUIToScreenRect(rect); + var w = EditorWindow.GetWindowWithRect(rect, true, "Select Type", true); + w.position = rect; + + w.Show(selected, filterType, onSelected, TypeFilter); + } + } + } +} \ No newline at end of file diff --git a/Editor/PropertyDrawers/TypePopupSelector.cs.meta b/Editor/PropertyDrawers/TypePopupSelector.cs.meta new file mode 100644 index 0000000..d6de35a --- /dev/null +++ b/Editor/PropertyDrawers/TypePopupSelector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8ca57526ba874f578e03547a13e8379a +timeCreated: 1665942952 \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/AnimationParameterAsset.cs b/Runtime/Authoring/AnimationStateMachine/AnimationParameterAsset.cs index 13c4a31..e08ef22 100644 --- a/Runtime/Authoring/AnimationStateMachine/AnimationParameterAsset.cs +++ b/Runtime/Authoring/AnimationStateMachine/AnimationParameterAsset.cs @@ -1,3 +1,4 @@ +using Unity.Collections; using Unity.Entities; using UnityEngine; @@ -5,6 +6,8 @@ namespace DMotion.Authoring { public abstract class AnimationParameterAsset : StateMachineSubAsset { - public int Hash => name.GetHashCode(); + public int Hash => StateMachineParameterUtils.GetHashCode(name); + + public abstract string ParameterTypeName { get; } } } \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/AnimationStateAsset.cs b/Runtime/Authoring/AnimationStateMachine/AnimationStateAsset.cs index 45ab338..57bc335 100644 --- a/Runtime/Authoring/AnimationStateMachine/AnimationStateAsset.cs +++ b/Runtime/Authoring/AnimationStateMachine/AnimationStateAsset.cs @@ -9,8 +9,8 @@ public abstract class AnimationStateAsset : StateMachineSubAsset { public bool Loop = true; public float Speed = 1; - - public List OutTransitions = new List(); + + public List OutTransitions = new(); public abstract StateType Type { get; } public abstract int ClipCount { get; } diff --git a/Runtime/Authoring/AnimationStateMachine/AnimationTransitionGroup.cs b/Runtime/Authoring/AnimationStateMachine/AnimationTransitionGroup.cs index 6322016..67dd01e 100644 --- a/Runtime/Authoring/AnimationStateMachine/AnimationTransitionGroup.cs +++ b/Runtime/Authoring/AnimationStateMachine/AnimationTransitionGroup.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Codice.CM.Common; using UnityEngine; using UnityEngine.Serialization; @@ -17,15 +18,28 @@ public class StateOutTransition public float TransitionDuration; public List Conditions; - public IEnumerable BoolTransitions => - Conditions.Where(c => c.Parameter is BoolParameterAsset); + public IEnumerable BoolTransitions => + Conditions.Where(c => c.Parameter is BoolParameterAsset).Select(c => c.AsBoolCondition); + public IEnumerable IntTransitions => + Conditions.Where(c => c.Parameter is IntParameterAsset).Select(c => c.AsIntegerCondition); public StateOutTransition(AnimationStateAsset to, - float transitionDuration = 0.15f, List boolTransitions = null) + float transitionDuration = 0.15f, + List boolTransitions = null, + List intTransitions = null) { ToState = to; TransitionDuration = transitionDuration; - Conditions = boolTransitions ?? new List(); + Conditions = new List(); + if (boolTransitions != null) + { + Conditions.AddRange(boolTransitions.Select(b => b.ToGenericCondition())); + } + + if (intTransitions != null) + { + Conditions.AddRange(intTransitions.Select(i => i.ToGenericCondition())); + } } } } \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/BoolParameterAsset.cs b/Runtime/Authoring/AnimationStateMachine/BoolParameterAsset.cs index 501fc7a..56182ad 100644 --- a/Runtime/Authoring/AnimationStateMachine/BoolParameterAsset.cs +++ b/Runtime/Authoring/AnimationStateMachine/BoolParameterAsset.cs @@ -5,5 +5,6 @@ namespace DMotion.Authoring { public class BoolParameterAsset : AnimationParameterAsset { + public override string ParameterTypeName => "Boolean"; } } \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/EnumParameterAsset.cs b/Runtime/Authoring/AnimationStateMachine/EnumParameterAsset.cs new file mode 100644 index 0000000..2a745f5 --- /dev/null +++ b/Runtime/Authoring/AnimationStateMachine/EnumParameterAsset.cs @@ -0,0 +1,9 @@ +namespace DMotion.Authoring +{ + public class EnumParameterAsset : IntParameterAsset + { + [EnumTypeFilter] + public SerializableType EnumType; + public override string ParameterTypeName => EnumType.Type is { IsEnum: true } ? EnumType.Type.Name : "NONE"; + } +} \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/EnumParameterAsset.cs.meta b/Runtime/Authoring/AnimationStateMachine/EnumParameterAsset.cs.meta new file mode 100644 index 0000000..680701b --- /dev/null +++ b/Runtime/Authoring/AnimationStateMachine/EnumParameterAsset.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dedf630c4bbf4fc39cb1d1b528eb9a91 +timeCreated: 1665635827 \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/FloatParameterAsset.cs b/Runtime/Authoring/AnimationStateMachine/FloatParameterAsset.cs index 4c3f107..73dcfa2 100644 --- a/Runtime/Authoring/AnimationStateMachine/FloatParameterAsset.cs +++ b/Runtime/Authoring/AnimationStateMachine/FloatParameterAsset.cs @@ -4,5 +4,6 @@ namespace DMotion.Authoring { public class FloatParameterAsset : AnimationParameterAsset { + public override string ParameterTypeName => "Float"; } } \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/IntParameterAsset.cs b/Runtime/Authoring/AnimationStateMachine/IntParameterAsset.cs new file mode 100644 index 0000000..aeaaea6 --- /dev/null +++ b/Runtime/Authoring/AnimationStateMachine/IntParameterAsset.cs @@ -0,0 +1,7 @@ +namespace DMotion.Authoring +{ + public class IntParameterAsset : AnimationParameterAsset + { + public override string ParameterTypeName => "Integer"; + } +} \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/IntParameterAsset.cs.meta b/Runtime/Authoring/AnimationStateMachine/IntParameterAsset.cs.meta new file mode 100644 index 0000000..0be1fb6 --- /dev/null +++ b/Runtime/Authoring/AnimationStateMachine/IntParameterAsset.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 583f2fcb59054a579c1f8b03cf1d88ce +timeCreated: 1665543193 \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/SerializableType.cs b/Runtime/Authoring/AnimationStateMachine/SerializableType.cs new file mode 100644 index 0000000..32630a8 --- /dev/null +++ b/Runtime/Authoring/AnimationStateMachine/SerializableType.cs @@ -0,0 +1,38 @@ +using System; +using UnityEngine; + +namespace DMotion.Authoring +{ + public class EnumTypeFilterAttribute : Attribute + { + + } + + [Serializable] + public struct SerializableType + { + public string AssemblyQualifiedTypeName; + private Type cachedType; + + public Type Type + { + get => IsTypeValidInternal() ? cachedType : cachedType = GetTypeInternal(); + set + { + AssemblyQualifiedTypeName = value != null ? value.AssemblyQualifiedName : ""; + cachedType = null; + } + } + + private bool IsTypeValidInternal() + { + return cachedType != null && !string.IsNullOrEmpty(cachedType.AssemblyQualifiedName) && + cachedType.AssemblyQualifiedName.Equals(AssemblyQualifiedTypeName); + } + + private Type GetTypeInternal() + { + return string.IsNullOrEmpty(AssemblyQualifiedTypeName) ? null : Type.GetType(AssemblyQualifiedTypeName); + } + } +} \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/SerializableType.cs.meta b/Runtime/Authoring/AnimationStateMachine/SerializableType.cs.meta new file mode 100644 index 0000000..0f800b3 --- /dev/null +++ b/Runtime/Authoring/AnimationStateMachine/SerializableType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a7e731a4bbb846fa90e684245e21c961 +timeCreated: 1665942809 \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachine/StateMachineAsset.cs b/Runtime/Authoring/AnimationStateMachine/StateMachineAsset.cs index 93d780a..b4cba74 100644 --- a/Runtime/Authoring/AnimationStateMachine/StateMachineAsset.cs +++ b/Runtime/Authoring/AnimationStateMachine/StateMachineAsset.cs @@ -8,8 +8,8 @@ namespace DMotion.Authoring public class StateMachineAsset : ScriptableObject { public AnimationStateAsset DefaultState; - public List States = new List(); - public List Parameters = new List(); + public List States = new(); + public List Parameters = new(); public IEnumerable Clips => States.SelectMany(s => s.Clips); public int ClipCount => States.Sum(s => s.ClipCount); diff --git a/Runtime/Authoring/AnimationStateMachine/TransitionCondition.cs b/Runtime/Authoring/AnimationStateMachine/TransitionCondition.cs index d211534..7055013 100644 --- a/Runtime/Authoring/AnimationStateMachine/TransitionCondition.cs +++ b/Runtime/Authoring/AnimationStateMachine/TransitionCondition.cs @@ -3,10 +3,61 @@ namespace DMotion.Authoring { [Serializable] - public class TransitionCondition + public struct TransitionCondition { public AnimationParameterAsset Parameter; public float ComparisonValue; public int ComparisonMode; + + public BoolTransitionCondition AsBoolCondition => new() + { + BoolParameter = (BoolParameterAsset)Parameter, + ComparisonValue = (BoolConditionComparison)ComparisonMode + }; + + public IntegerTransitionCondition AsIntegerCondition => new() + { + IntParameter = (IntParameterAsset)Parameter, + ComparisonMode = (IntConditionComparison)ComparisonMode, + ComparisonValue = (int)ComparisonValue + }; + } + + public enum BoolConditionComparison + { + True, + False + } + + public struct BoolTransitionCondition + { + public BoolParameterAsset BoolParameter; + public BoolConditionComparison ComparisonValue; + + public TransitionCondition ToGenericCondition() + { + return new TransitionCondition + { + Parameter = BoolParameter, + ComparisonValue = (float)ComparisonValue, + ComparisonMode = (int)ComparisonValue + }; + } + } + + public struct IntegerTransitionCondition + { + public IntParameterAsset IntParameter; + public IntConditionComparison ComparisonMode; + public int ComparisonValue; + public TransitionCondition ToGenericCondition() + { + return new TransitionCondition + { + Parameter = IntParameter, + ComparisonValue = ComparisonValue, + ComparisonMode = (int) ComparisonMode + }; + } } } \ No newline at end of file diff --git a/Runtime/Authoring/AnimationStateMachineAuthoring.cs b/Runtime/Authoring/AnimationStateMachineAuthoring.cs index 95f59d3..f177076 100644 --- a/Runtime/Authoring/AnimationStateMachineAuthoring.cs +++ b/Runtime/Authoring/AnimationStateMachineAuthoring.cs @@ -12,7 +12,7 @@ public static class StateMachineEditorConstants { public const string DMotionPath = "DMotion"; } - + public class AnimationStateMachineAuthoring : MonoBehaviour, IConvertGameObjectToEntity, IRequestBlobAssets { public GameObject Owner; @@ -21,70 +21,34 @@ public class AnimationStateMachineAuthoring : MonoBehaviour, IConvertGameObjectT public RootMotionMode RootMotionMode; public bool EnableEvents = true; - + private SmartBlobberHandle clipsBlobHandle; private SmartBlobberHandle stateMachineBlobHandle; private SmartBlobberHandle clipEventsBlobHandle; - + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) { var stateMachineBlob = stateMachineBlobHandle.Resolve(); var clipsBlob = clipsBlobHandle.Resolve(); var clipEventsBlob = clipEventsBlobHandle.Resolve(); - var stateMachine = new AnimationStateMachine() - { - StateMachineBlob = stateMachineBlob, - ClipsBlob = clipsBlob, - ClipEventsBlob = clipEventsBlob, - CurrentState = StateMachineStateRef.Null - }; - - dstManager.AddComponentData(entity, stateMachine); - dstManager.AddComponentData(entity, AnimationStateMachineTransitionRequest.Null); - - dstManager.AddBuffer(entity); - dstManager.AddBuffer(entity); + AnimationStateMachineConversionUtils.AddStateMachineSystemComponents(dstManager, entity, StateMachineAsset, + stateMachineBlob, + clipsBlob, + clipEventsBlob); + AnimationStateMachineConversionUtils.AddAnimationStateSystemComponents(dstManager, entity); + AnimationStateMachineConversionUtils.AddOneShotSystemComponents(dstManager, entity); - dstManager.AddBuffer(entity); - dstManager.AddComponentData(entity, AnimationStateTransition.Null); - dstManager.AddComponentData(entity, AnimationStateTransitionRequest.Null); - dstManager.AddComponentData(entity, AnimationCurrentState.Null); - var clipSamplers = dstManager.AddBuffer(entity); - clipSamplers.Capacity = 10; - if (EnableEvents && StateMachineAsset.Clips.Any(c => c.Events.Length > 0)) { dstManager.GetOrCreateBuffer(entity); } - dstManager.AddBuffer(entity); - dstManager.AddBuffer(entity); - foreach (var p in StateMachineAsset.Parameters) - { - switch (p) - { - case BoolParameterAsset _: - var boolParameters = dstManager.GetBuffer(entity); - boolParameters.Add(new BoolParameter(p.name, p.Hash)); - break; - case FloatParameterAsset _: - var floatParameters = dstManager.GetBuffer(entity); - floatParameters.Add(new BlendParameter(p.name, p.Hash)); - break; - default: - throw new ArgumentOutOfRangeException(nameof(p)); - } - } - - dstManager.AddComponentData(entity, PlayOneShotRequest.Null); - dstManager.AddComponentData(entity, OneShotState.Null); - if (gameObject != Owner) { var ownerEntity = conversionSystem.GetPrimaryEntity(Owner); dstManager.AddComponentData(ownerEntity, new AnimatorOwner() { AnimatorEntity = entity }); - dstManager.AddComponentData(entity, new AnimatorEntity() { Owner = ownerEntity}); + dstManager.AddComponentData(entity, new AnimatorEntity() { Owner = ownerEntity }); } switch (RootMotionMode) @@ -103,6 +67,7 @@ public void Convert(Entity entity, EntityManager dstManager, GameObjectConversio { dstManager.AddComponentData(entity, new ApplyRootMotionToEntity()); } + break; case RootMotionMode.EnabledManual: dstManager.AddComponentData(entity, new RootDeltaTranslation()); @@ -111,17 +76,18 @@ public void Convert(Entity entity, EntityManager dstManager, GameObjectConversio default: throw new ArgumentOutOfRangeException(); } - } - public void RequestBlobAssets(Entity entity, EntityManager dstEntityManager, GameObjectConversionSystem conversionSystem) + public void RequestBlobAssets(Entity entity, EntityManager dstEntityManager, + GameObjectConversionSystem conversionSystem) { ValidateStateMachine(); clipsBlobHandle = conversionSystem.RequestClipsBlob(Animator, StateMachineAsset.Clips); - stateMachineBlobHandle = conversionSystem.RequestStateMachineBlob(Animator.gameObject, new StateMachineBlobBakeData - { - StateMachineAsset = StateMachineAsset - }); + stateMachineBlobHandle = conversionSystem.RequestStateMachineBlob(Animator.gameObject, + new StateMachineBlobBakeData + { + StateMachineAsset = StateMachineAsset + }); clipEventsBlobHandle = conversionSystem.RequestClipEventsBlob(Animator.gameObject, StateMachineAsset.Clips); } @@ -131,7 +97,8 @@ private void ValidateStateMachine() { foreach (var c in s.Clips) { - Assert.IsTrue(c != null && c.Clip != null, $"State ({s.name}) in State Machine {StateMachineAsset.name} has invalid clips"); + Assert.IsTrue(c != null && c.Clip != null, + $"State ({s.name}) in State Machine {StateMachineAsset.name} has invalid clips"); } } } diff --git a/Runtime/Authoring/Conversion/AnimationStateMachineAssetBuilder.cs b/Runtime/Authoring/Conversion/AnimationStateMachineAssetBuilder.cs new file mode 100644 index 0000000..52cd758 --- /dev/null +++ b/Runtime/Authoring/Conversion/AnimationStateMachineAssetBuilder.cs @@ -0,0 +1,80 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace DMotion.Authoring +{ + public struct AnimationStateMachineAssetBuilder + { + private StateMachineAsset stateMachineAsset; + + public static AnimationStateMachineAssetBuilder New() + { + var stateMachineAsset = ScriptableObject.CreateInstance(); + stateMachineAsset.States = new List(); + stateMachineAsset.Parameters = new List(); + return new AnimationStateMachineAssetBuilder + { stateMachineAsset = stateMachineAsset }; + } + + public StateMachineAsset Build() + { + return stateMachineAsset; + } + + public T AddState(bool loop = true, float speed = 1) + where T : AnimationStateAsset + { + var state = ScriptableObject.CreateInstance(); + state.Loop = loop; + state.Speed = speed; + state.OutTransitions = new List(); + stateMachineAsset.States.Add(state); + + if (stateMachineAsset.DefaultState == null) + { + stateMachineAsset.DefaultState = state; + } + + return state; + } + + public T AddParameter(string name) + where T : AnimationParameterAsset + { + var parameter = ScriptableObject.CreateInstance(); + parameter.name = name; + stateMachineAsset.Parameters.Add(parameter); + return parameter; + } + + public StateOutTransition AddTransition(AnimationStateAsset from, AnimationStateAsset to) + { + from.OutTransitions.Add(new StateOutTransition(to)); + return from.OutTransitions.Last(); + } + + public void AddIntCondition(StateOutTransition outTransition, IntParameterAsset intParameter, + IntConditionComparison comparison, int comparisonValue) + { + var intTransitionCondition = new IntegerTransitionCondition + { + IntParameter = intParameter, + ComparisonMode = comparison, + ComparisonValue = comparisonValue + }; + outTransition.Conditions.Add(intTransitionCondition.ToGenericCondition()); + } + + public void AddBoolCondition(StateOutTransition outTransition, BoolParameterAsset boolParameter, + BoolConditionComparison comparison) + { + var boolTransitionCondition = new BoolTransitionCondition + { + BoolParameter = boolParameter, + ComparisonValue = comparison, + }; + outTransition.Conditions.Add(boolTransitionCondition.ToGenericCondition()); + } + } +} \ No newline at end of file diff --git a/Runtime/Authoring/Conversion/AnimationStateMachineAssetBuilder.cs.meta b/Runtime/Authoring/Conversion/AnimationStateMachineAssetBuilder.cs.meta new file mode 100644 index 0000000..635f47b --- /dev/null +++ b/Runtime/Authoring/Conversion/AnimationStateMachineAssetBuilder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fe718948aa604d14820360bf044fe070 +timeCreated: 1665632716 \ No newline at end of file diff --git a/Runtime/Authoring/Conversion/AnimationStateMachineAuthoringUtils.cs b/Runtime/Authoring/Conversion/AnimationStateMachineAuthoringUtils.cs new file mode 100644 index 0000000..27ed8c8 --- /dev/null +++ b/Runtime/Authoring/Conversion/AnimationStateMachineAuthoringUtils.cs @@ -0,0 +1,62 @@ +using System.Collections.Generic; +using System.Linq; +using Latios.Authoring; +using Latios.Kinemation; +using Latios.Kinemation.Authoring; +using UnityEngine; + +namespace DMotion.Authoring +{ + public static class AnimationStateMachineAuthoringUtils + { + public static SmartBlobberHandle RequestClipsBlob( + this GameObjectConversionSystem conversionSystem, + Animator animator, + params AnimationClipAsset[] clipAssets) + { + return conversionSystem.RequestClipsBlob(animator, (IEnumerable) clipAssets); + } + + public static SmartBlobberHandle RequestClipsBlob( + this GameObjectConversionSystem conversionSystem, + Animator animator, + IEnumerable clipAssets) + { + var clips = clipAssets.Select(c => new SkeletonClipConfig() + { + clip = c.Clip, + settings = SkeletonClipCompressionSettings.kDefaultSettings + }); + return conversionSystem.CreateBlob(animator.gameObject, new SkeletonClipSetBakeData() + { + animator = animator, + clips = clips.ToArray() + }); + } + public static SmartBlobberHandle RequestStateMachineBlob( + this GameObjectConversionSystem conversionSystem, + GameObject gameObject, + StateMachineBlobBakeData bakeData) + { + return conversionSystem.World.GetExistingSystem() + .AddToConvert(gameObject, bakeData); + } + + public static SmartBlobberHandle RequestClipEventsBlob( + this GameObjectConversionSystem conversionSystem, + GameObject gameObject, + params AnimationClipAsset[] clips) + { + return conversionSystem.RequestClipEventsBlob(gameObject, (IEnumerable)clips); + } + + public static SmartBlobberHandle RequestClipEventsBlob( + this GameObjectConversionSystem conversionSystem, + GameObject gameObject, + IEnumerable clips) + { + return conversionSystem.World.GetExistingSystem() + .AddToConvert(gameObject, new ClipEventsBlobBakeData(){Clips = clips.ToArray()}); + } + } +} \ No newline at end of file diff --git a/Runtime/Authoring/Conversion/AnimationStateMachineAuthoringUtils.cs.meta b/Runtime/Authoring/Conversion/AnimationStateMachineAuthoringUtils.cs.meta new file mode 100644 index 0000000..62086b7 --- /dev/null +++ b/Runtime/Authoring/Conversion/AnimationStateMachineAuthoringUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 68689b166c1d49828f412d6ff34dffbd +timeCreated: 1658428050 \ No newline at end of file diff --git a/Runtime/Authoring/Conversion/AnimationStateMachineConversionUtils.cs b/Runtime/Authoring/Conversion/AnimationStateMachineConversionUtils.cs index a9fe913..d361952 100644 --- a/Runtime/Authoring/Conversion/AnimationStateMachineConversionUtils.cs +++ b/Runtime/Authoring/Conversion/AnimationStateMachineConversionUtils.cs @@ -1,64 +1,266 @@ -using System; -using System.Collections.Generic; +using System; using System.Linq; -using Latios.Authoring; using Latios.Kinemation; -using Latios.Kinemation.Authoring; +using Unity.Assertions; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; using Unity.Entities; using UnityEngine; namespace DMotion.Authoring { - public static class AnimationStateMachineConversionUtils + internal static class AnimationStateMachineConversionUtils { - public static SmartBlobberHandle RequestClipsBlob( - this GameObjectConversionSystem conversionSystem, - Animator animator, - params AnimationClipAsset[] clipAssets) + public static BlobAssetReference CreateStateMachineBlob(StateMachineAsset stateMachineAsset, + Allocator allocator) { - return conversionSystem.RequestClipsBlob(animator, (IEnumerable) clipAssets); + return CreateConverter(stateMachineAsset, allocator).BuildBlob(); } - - public static SmartBlobberHandle RequestClipsBlob( - this GameObjectConversionSystem conversionSystem, - Animator animator, - IEnumerable clipAssets) + + internal static StateMachineBlobConverter CreateConverter(StateMachineAsset stateMachineAsset, + Allocator allocator) { - var clips = clipAssets.Select(c => new SkeletonClipConfig() + var converter = new StateMachineBlobConverter(); + var defaultStateIndex = stateMachineAsset.States.ToList().IndexOf(stateMachineAsset.DefaultState); + Assert.IsTrue(defaultStateIndex >= 0, + $"Couldn't find state {stateMachineAsset.DefaultState.name}, in state machine {stateMachineAsset.name}"); + converter.DefaultStateIndex = (byte)defaultStateIndex; + BuildStates(stateMachineAsset, ref converter, allocator); + return converter; + } + + private static void BuildStates(StateMachineAsset stateMachineAsset, ref StateMachineBlobConverter converter, + Allocator allocator) + { + var singleClipStates = stateMachineAsset.States.OfType().ToArray(); + var linearBlendStates = stateMachineAsset.States.OfType().ToArray(); + + converter.States = + new UnsafeList(stateMachineAsset.States.Count, allocator); + converter.States.Resize(stateMachineAsset.States.Count); + + converter.SingleClipStates = + new UnsafeList(singleClipStates.Length, allocator); + + converter.LinearBlendStates = + new UnsafeList(linearBlendStates.Length, + allocator); + + ushort clipIndex = 0; + for (var i = 0; i < converter.States.Length; i++) { - clip = c.Clip, - settings = SkeletonClipCompressionSettings.kDefaultSettings - }); - return conversionSystem.CreateBlob(animator.gameObject, new SkeletonClipSetBakeData() + var stateAsset = stateMachineAsset.States[i]; + var stateImplIndex = -1; + switch (stateAsset) + { + case LinearBlendStateAsset linearBlendStateAsset: + stateImplIndex = converter.LinearBlendStates.Length; + var blendParameterIndex = + stateMachineAsset.Parameters + .OfType() + .ToList() + .FindIndex(f => f == linearBlendStateAsset.BlendParameter); + + Assert.IsTrue(blendParameterIndex >= 0, + $"({stateMachineAsset.name}) Couldn't find parameter {linearBlendStateAsset.BlendParameter.name}, for Linear Blend State"); + + var linearBlendState = new LinearBlendStateConversionData() + { + BlendParameterIndex = (ushort)blendParameterIndex + }; + + linearBlendState.ClipsWithThresholds = new UnsafeList( + linearBlendStateAsset.BlendClips.Length, allocator); + + linearBlendState.ClipsWithThresholds.Resize(linearBlendStateAsset.BlendClips.Length); + for (ushort blendClipIndex = 0; + blendClipIndex < linearBlendState.ClipsWithThresholds.Length; + blendClipIndex++) + { + linearBlendState.ClipsWithThresholds[blendClipIndex] = new ClipIndexWithThreshold + { + ClipIndex = clipIndex, + Threshold = linearBlendStateAsset.BlendClips[blendClipIndex].Threshold + }; + clipIndex++; + } + + converter.LinearBlendStates.Add(linearBlendState); + break; + case SingleClipStateAsset singleClipStateAsset: + stateImplIndex = converter.SingleClipStates.Length; + converter.SingleClipStates.Add(new SingleClipStateBlob() + { + ClipIndex = clipIndex, + }); + clipIndex++; + break; + default: + throw new ArgumentOutOfRangeException(nameof(stateAsset)); + } + + Assert.IsTrue(stateImplIndex >= 0, $"Index to state implementation needs to be assigned"); + converter.States[i] = + BuildStateConversionData(stateMachineAsset, stateAsset, stateImplIndex, allocator); + } + } + + private static AnimationStateConversionData BuildStateConversionData(StateMachineAsset stateMachineAsset, + AnimationStateAsset state, int stateIndex, Allocator allocator) + { + var stateConversionData = new AnimationStateConversionData() { - animator = animator, - clips = clips.ToArray() - }); + Type = state.Type, + StateIndex = (ushort)stateIndex, + Loop = state.Loop, + Speed = state.Speed + }; + + //Create Transition Groups + var transitionCount = state.OutTransitions.Count; + stateConversionData.Transitions = + new UnsafeList(transitionCount, allocator); + stateConversionData.Transitions.Resize(transitionCount); + + for (var transitionIndex = 0; transitionIndex < stateConversionData.Transitions.Length; transitionIndex++) + { + var outTransitionAsset = state.OutTransitions[transitionIndex]; + + var toStateIndex = + (short)stateMachineAsset.States.ToList().FindIndex(s => s == outTransitionAsset.ToState); + Assert.IsTrue(toStateIndex >= 0, + $"State {outTransitionAsset.ToState.name} not present on State Machine {stateMachineAsset.name}"); + var outTransition = new StateOutTransitionConversionData() + { + ToStateIndex = toStateIndex, + TransitionEndTime = outTransitionAsset.HasEndTime ? Mathf.Max(0, outTransitionAsset.EndTime) : -1f, + TransitionDuration = outTransitionAsset.TransitionDuration, + }; + + //Create bool transitions + { + var boolTransitions = outTransitionAsset.BoolTransitions.ToArray(); + outTransition.BoolTransitions = + new UnsafeList(boolTransitions.Length, allocator); + outTransition.BoolTransitions.Resize(boolTransitions.Length); + for (var boolTransitionIndex = 0; + boolTransitionIndex < outTransition.BoolTransitions.Length; + boolTransitionIndex++) + { + var boolTransitionAsset = boolTransitions[boolTransitionIndex]; + var parameterIndex = stateMachineAsset.Parameters + .OfType() + .ToList() + .FindIndex(p => p == boolTransitionAsset.BoolParameter); + + Assert.IsTrue(parameterIndex >= 0, + $"({stateMachineAsset.name}) Couldn't find parameter {boolTransitionAsset.BoolParameter.name}, for transition"); + outTransition.BoolTransitions[boolTransitionIndex] = new BoolTransition + { + ComparisonValue = boolTransitionAsset.ComparisonValue == BoolConditionComparison.True, + ParameterIndex = parameterIndex + }; + } + } + + //Create int transitions + { + var intTransitions = outTransitionAsset.IntTransitions.ToArray(); + var intParameters = stateMachineAsset.Parameters + .OfType() + .ToList(); + outTransition.IntTransitions = + new UnsafeList(intTransitions.Length, allocator); + outTransition.IntTransitions.Resize(intTransitions.Length); + for (var intTransitionIndex = 0; + intTransitionIndex < outTransition.IntTransitions.Length; + intTransitionIndex++) + { + var intTransitionAsset = intTransitions[intTransitionIndex]; + var parameterIndex = intParameters.FindIndex(p => p == intTransitionAsset.IntParameter); + + Assert.IsTrue(parameterIndex >= 0, + $"({stateMachineAsset.name}) Couldn't find parameter {intTransitionAsset.IntParameter.name}, for transition"); + outTransition.IntTransitions[intTransitionIndex] = new IntTransition + { + ParameterIndex = parameterIndex, + ComparisonValue = intTransitionAsset.ComparisonValue, + ComparisonMode = intTransitionAsset.ComparisonMode + }; + } + } + + stateConversionData.Transitions[transitionIndex] = outTransition; + } + + return stateConversionData; } - public static SmartBlobberHandle RequestStateMachineBlob( - this GameObjectConversionSystem conversionSystem, - GameObject gameObject, - StateMachineBlobBakeData bakeData) + + internal static void AddAnimationStateSystemComponents(EntityManager dstManager, Entity entity) { - return conversionSystem.World.GetExistingSystem() - .AddToConvert(gameObject, bakeData); + dstManager.AddBuffer(entity); + dstManager.AddComponentData(entity, AnimationStateTransition.Null); + dstManager.AddComponentData(entity, AnimationStateTransitionRequest.Null); + dstManager.AddComponentData(entity, AnimationCurrentState.Null); + var clipSamplers = dstManager.AddBuffer(entity); + clipSamplers.Capacity = 10; } - - public static SmartBlobberHandle RequestClipEventsBlob( - this GameObjectConversionSystem conversionSystem, - GameObject gameObject, - params AnimationClipAsset[] clips) + + internal static void AddOneShotSystemComponents(EntityManager dstManager, Entity entity) { - return conversionSystem.RequestClipEventsBlob(gameObject, (IEnumerable)clips); + dstManager.AddComponentData(entity, PlayOneShotRequest.Null); + dstManager.AddComponentData(entity, OneShotState.Null); } - - public static SmartBlobberHandle RequestClipEventsBlob( - this GameObjectConversionSystem conversionSystem, - GameObject gameObject, - IEnumerable clips) + + internal static void AddStateMachineSystemComponents(EntityManager dstManager, Entity entity, + StateMachineAsset stateMachineAsset, + BlobAssetReference stateMachineBlob, + BlobAssetReference clipsBlob, + BlobAssetReference clipEventsBlob) { - return conversionSystem.World.GetExistingSystem() - .AddToConvert(gameObject, new ClipEventsBlobBakeData(){Clips = clips.ToArray()}); + //state machine data + { + var stateMachine = new AnimationStateMachine + { + StateMachineBlob = stateMachineBlob, + ClipsBlob = clipsBlob, + ClipEventsBlob = clipEventsBlob, + CurrentState = StateMachineStateRef.Null + }; + + dstManager.AddComponentData(entity, stateMachine); + dstManager.AddComponentData(entity, AnimationStateMachineTransitionRequest.Null); + + dstManager.AddBuffer(entity); + dstManager.AddBuffer(entity); + } + + //Parameters + { + dstManager.AddBuffer(entity); + dstManager.AddBuffer(entity); + dstManager.AddBuffer(entity); + foreach (var p in stateMachineAsset.Parameters) + { + switch (p) + { + case BoolParameterAsset: + var boolParameters = dstManager.GetBuffer(entity); + boolParameters.Add(new BoolParameter(p.name, p.Hash)); + break; + case IntParameterAsset: + var intParameters = dstManager.GetBuffer(entity); + intParameters.Add(new IntParameter(p.name, p.Hash)); + break; + case FloatParameterAsset: + var floatParameters = dstManager.GetBuffer(entity); + floatParameters.Add(new BlendParameter(p.name, p.Hash)); + break; + default: + throw new ArgumentOutOfRangeException(nameof(p)); + } + } + } } } } \ No newline at end of file diff --git a/Runtime/Authoring/Conversion/AnimationStateMachineConversionUtils.cs.meta b/Runtime/Authoring/Conversion/AnimationStateMachineConversionUtils.cs.meta index 62086b7..4b11268 100644 --- a/Runtime/Authoring/Conversion/AnimationStateMachineConversionUtils.cs.meta +++ b/Runtime/Authoring/Conversion/AnimationStateMachineConversionUtils.cs.meta @@ -1,3 +1,3 @@ -fileFormatVersion: 2 -guid: 68689b166c1d49828f412d6ff34dffbd -timeCreated: 1658428050 \ No newline at end of file +fileFormatVersion: 2 +guid: 664cea1e826b4cfc84fba18e5aaf6d04 +timeCreated: 1665627479 \ No newline at end of file diff --git a/Runtime/Authoring/Conversion/AnimationStateMachineSmartBlobberSystem.cs b/Runtime/Authoring/Conversion/AnimationStateMachineSmartBlobberSystem.cs index d93a0dd..1eafc75 100644 --- a/Runtime/Authoring/Conversion/AnimationStateMachineSmartBlobberSystem.cs +++ b/Runtime/Authoring/Conversion/AnimationStateMachineSmartBlobberSystem.cs @@ -1,10 +1,5 @@ -using System; -using System.Linq; using Latios.Authoring.Systems; using Latios.Kinemation.Authoring.Systems; -using Unity.Assertions; -using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; using Unity.Entities; using UnityEngine; @@ -22,151 +17,10 @@ internal class AnimationStateMachineSmartBlobberSystem : SmartBlobberConversionS protected override bool Filter(in StateMachineBlobBakeData input, GameObject gameObject, out StateMachineBlobConverter converter) { - converter = new StateMachineBlobConverter(); - - var stateMachineAsset = input.StateMachineAsset; - var allocator = World.UpdateAllocator.ToAllocator; - var defaultStateIndex = stateMachineAsset.States.ToList().IndexOf(stateMachineAsset.DefaultState); - Assert.IsTrue(defaultStateIndex >= 0, $"Couldn't find state {stateMachineAsset.DefaultState.name}, in state machine {stateMachineAsset.name}"); - converter.DefaultStateIndex = (byte)defaultStateIndex; - BuildStates(stateMachineAsset, ref converter, allocator); + converter = AnimationStateMachineConversionUtils.CreateConverter(input.StateMachineAsset, allocator); return true; } - - private void BuildStates(StateMachineAsset stateMachineAsset, ref StateMachineBlobConverter converter, - Allocator allocator) - { - var singleClipStates = stateMachineAsset.States.OfType().ToArray(); - var linearBlendStates = stateMachineAsset.States.OfType().ToArray(); - - converter.States = - new UnsafeList(stateMachineAsset.States.Count, allocator); - converter.States.Resize(stateMachineAsset.States.Count); - - converter.SingleClipStates = - new UnsafeList(singleClipStates.Length, allocator); - - converter.LinearBlendStates = - new UnsafeList(linearBlendStates.Length, - allocator); - - ushort clipIndex = 0; - for (var i = 0; i < converter.States.Length; i++) - { - var stateAsset = stateMachineAsset.States[i]; - var stateImplIndex = -1; - switch (stateAsset) - { - case LinearBlendStateAsset linearBlendStateAsset: - stateImplIndex = converter.LinearBlendStates.Length; - var blendParameterIndex = - stateMachineAsset.Parameters - .OfType() - .ToList() - .FindIndex(f => f == linearBlendStateAsset.BlendParameter); - - Assert.IsTrue(blendParameterIndex >= 0, - $"({stateMachineAsset.name}) Couldn't find parameter {linearBlendStateAsset.BlendParameter.name}, for Linear Blend State"); - - var linearBlendState = new LinearBlendStateConversionData() - { - BlendParameterIndex = (ushort) blendParameterIndex - }; - - linearBlendState.ClipsWithThresholds = new UnsafeList( - linearBlendStateAsset.BlendClips.Length, allocator); - - linearBlendState.ClipsWithThresholds.Resize(linearBlendStateAsset.BlendClips.Length); - for (ushort blendClipIndex = 0; blendClipIndex < linearBlendState.ClipsWithThresholds.Length; blendClipIndex++) - { - linearBlendState.ClipsWithThresholds[blendClipIndex] = new ClipIndexWithThreshold - { - ClipIndex = clipIndex, - Threshold = linearBlendStateAsset.BlendClips[blendClipIndex].Threshold - }; - clipIndex++; - } - - converter.LinearBlendStates.Add(linearBlendState); - break; - case SingleClipStateAsset singleClipStateAsset: - stateImplIndex = converter.SingleClipStates.Length; - converter.SingleClipStates.Add(new SingleClipStateBlob() - { - ClipIndex = clipIndex, - }); - clipIndex++; - break; - default: - throw new ArgumentOutOfRangeException(nameof(stateAsset)); - } - - Assert.IsTrue(stateImplIndex >= 0, $"Index to state implementation needs to be assigned"); - converter.States[i] = - BuildStateConversionData(stateMachineAsset, stateAsset, stateImplIndex, allocator); - } - } - - private AnimationStateConversionData BuildStateConversionData(StateMachineAsset stateMachineAsset, AnimationStateAsset state, int stateIndex, Allocator allocator) - { - var stateConversionData = new AnimationStateConversionData() - { - Type = state.Type, - StateIndex = (ushort)stateIndex, - Loop = state.Loop, - Speed = state.Speed - }; - - //Create Transition Groups - var transitionCount = state.OutTransitions.Count; - stateConversionData.Transitions = - new UnsafeList(transitionCount, allocator); - stateConversionData.Transitions.Resize(transitionCount); - - for (var transitionIndex = 0; transitionIndex < stateConversionData.Transitions.Length; transitionIndex++) - { - var outTransitionAsset = state.OutTransitions[transitionIndex]; - - var toStateIndex = - (short)stateMachineAsset.States.ToList().FindIndex(s => s == outTransitionAsset.ToState); - Assert.IsTrue(toStateIndex >= 0, - $"State {outTransitionAsset.ToState.name} not present on State Machine {stateMachineAsset.name}"); - var outTransition = new StateOutTransitionConversionData() - { - ToStateIndex = toStateIndex, - TransitionEndTime = outTransitionAsset.HasEndTime ? Mathf.Max(0, outTransitionAsset.EndTime) : -1f, - TransitionDuration = outTransitionAsset.TransitionDuration, - }; - - //Create bool transitions - { - var boolTransitions = outTransitionAsset.BoolTransitions.ToArray(); - outTransition.BoolTransitions = - new UnsafeList(boolTransitions.Length, allocator); - outTransition.BoolTransitions.Resize(boolTransitions.Length); - for (var boolTransitionIndex = 0; boolTransitionIndex < outTransition.BoolTransitions.Length; boolTransitionIndex++) - { - var boolTransitionAsset = outTransitionAsset.Conditions[boolTransitionIndex]; - var parameterIndex = stateMachineAsset.Parameters - .OfType() - .ToList() - .FindIndex(p => p == boolTransitionAsset.Parameter); - - Assert.IsTrue(parameterIndex >= 0, - $"({stateMachineAsset.name}) Couldn't find parameter {boolTransitionAsset.Parameter.name}, for transition"); - outTransition.BoolTransitions[boolTransitionIndex] = new BoolTransition() - { - ComparisonValue = boolTransitionAsset.ComparisonValue == 1.0f, - ParameterIndex = parameterIndex - }; - } - } - - stateConversionData.Transitions[transitionIndex] = outTransition; - } - return stateConversionData; - } } } \ No newline at end of file diff --git a/Runtime/Authoring/Conversion/StateMachineBlobConverter.cs b/Runtime/Authoring/Conversion/StateMachineBlobConverter.cs index a7f1936..727876c 100644 --- a/Runtime/Authoring/Conversion/StateMachineBlobConverter.cs +++ b/Runtime/Authoring/Conversion/StateMachineBlobConverter.cs @@ -34,6 +34,7 @@ internal struct StateOutTransitionConversionData internal float TransitionDuration; internal float TransitionEndTime; internal UnsafeList BoolTransitions; + internal UnsafeList IntTransitions; } internal struct StateMachineBlobConverter : ISmartBlobberSimpleBuilder, IComparer @@ -80,6 +81,11 @@ public unsafe BlobAssetReference BuildBlob() ref transitions[transitionIndex].BoolTransitions, transitionConversionData.BoolTransitions.Ptr, transitionConversionData.BoolTransitions.Length); + + builder.ConstructFromNativeArray( + ref transitions[transitionIndex].IntTransitions, + transitionConversionData.IntTransitions.Ptr, + transitionConversionData.IntTransitions.Length); } } } diff --git a/Runtime/Components/AnimationParameters.cs b/Runtime/Components/AnimationParameters.cs index fc09d65..51437d1 100644 --- a/Runtime/Components/AnimationParameters.cs +++ b/Runtime/Components/AnimationParameters.cs @@ -1,15 +1,63 @@ -using Unity.Collections; +using System.Runtime.CompilerServices; +using Unity.Collections; using Unity.Entities; namespace DMotion { - public struct BoolParameter : IBufferElementData + public interface IHasHash { - #if UNITY_EDITOR || DEBUG + int Hash { get; } + } + + public interface IStateMachineParameter : IHasHash + where T : struct + { + T Value { get; set; } + } + + public struct IntParameter : IBufferElementData, IStateMachineParameter + { +#if UNITY_EDITOR || DEBUG public FixedString64Bytes Name; - #endif +#endif + public int Hash; + public int Value; + int IHasHash.Hash => Hash; + int IStateMachineParameter.Value + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => Value; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + set => Value = value; + } + + public IntParameter(FixedString64Bytes name, int hash) + { +#if UNITY_EDITOR || DEBUG + Name = name; +#endif + Hash = hash; + Value = 0; + } + } + + public struct BoolParameter : IBufferElementData, IStateMachineParameter + { +#if UNITY_EDITOR || DEBUG + public FixedString64Bytes Name; +#endif public int Hash; public bool Value; + + int IHasHash.Hash => Hash; + bool IStateMachineParameter.Value + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => Value; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + set => Value = value; + } + public BoolParameter(FixedString64Bytes name, int hash) { #if UNITY_EDITOR || DEBUG @@ -19,15 +67,23 @@ public BoolParameter(FixedString64Bytes name, int hash) Value = false; } } - - public struct BlendParameter : IBufferElementData + + public struct BlendParameter : IBufferElementData, IStateMachineParameter { - #if UNITY_EDITOR || DEBUG +#if UNITY_EDITOR || DEBUG public FixedString64Bytes Name; - #endif +#endif public int Hash; public float Value; - + int IHasHash.Hash => Hash; + float IStateMachineParameter.Value + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + get => Value; + [MethodImpl(MethodImplOptions.AggressiveInlining)] + set => Value = value; + } + public BlendParameter(FixedString64Bytes name, int hash) { #if UNITY_EDITOR || DEBUG diff --git a/Runtime/Components/AnimationTransition.cs b/Runtime/Components/AnimationTransition.cs index b0467a1..982ff5f 100644 --- a/Runtime/Components/AnimationTransition.cs +++ b/Runtime/Components/AnimationTransition.cs @@ -1,3 +1,4 @@ +using System; using Unity.Entities; namespace DMotion @@ -8,8 +9,9 @@ internal struct StateOutTransitionGroup internal float TransitionDuration; internal float TransitionEndTime; internal BlobArray BoolTransitions; + internal BlobArray IntTransitions; internal bool HasEndTime => TransitionEndTime > 0; - internal bool HasAnyConditions => BoolTransitions.Length > 0; + internal bool HasAnyConditions => BoolTransitions.Length > 0 || IntTransitions.Length > 0; } internal struct BoolTransition { @@ -20,4 +22,33 @@ internal bool Evaluate(in BoolParameter parameter) return parameter.Value == ComparisonValue; } } + + public enum IntConditionComparison + { + Equal = 0, + NotEqual, + Greater, + Less, + GreaterOrEqual, + LessOrEqual + } + internal struct IntTransition + { + internal int ParameterIndex; + internal IntConditionComparison ComparisonMode; + internal int ComparisonValue; + internal bool Evaluate(in IntParameter parameter) + { + return ComparisonMode switch + { + IntConditionComparison.Equal => parameter.Value == ComparisonValue, + IntConditionComparison.NotEqual => parameter.Value != ComparisonValue, + IntConditionComparison.Greater => parameter.Value > ComparisonValue, + IntConditionComparison.Less => parameter.Value < ComparisonValue, + IntConditionComparison.GreaterOrEqual => parameter.Value >= ComparisonValue, + IntConditionComparison.LessOrEqual => parameter.Value <= ComparisonValue, + _ => throw new ArgumentOutOfRangeException() + }; + } + } } \ No newline at end of file diff --git a/Runtime/Systems/BlendAnimationStatesSystem.cs b/Runtime/Systems/BlendAnimationStatesSystem.cs index b82ddba..d7b651f 100644 --- a/Runtime/Systems/BlendAnimationStatesSystem.cs +++ b/Runtime/Systems/BlendAnimationStatesSystem.cs @@ -2,6 +2,7 @@ using Unity.Entities; using Unity.Mathematics; using Unity.Transforms; +using UnityEngine; using UnityEngine.Assertions; namespace DMotion @@ -30,38 +31,37 @@ ref DynamicBuffer animationStates } //Check for new transition - var toAnimationStateIndex = -1; if (transitionRequest.IsValid) { - toAnimationStateIndex = animationStates.IdToIndex((byte)transitionRequest.AnimationStateId); + var newToStateIndex = animationStates.IdToIndex((byte)transitionRequest.AnimationStateId); //if we don't have a valid state, just transition instantly var transitionDuration = animationCurrentState.IsValid ? transitionRequest.TransitionDuration : 0; - if (toAnimationStateIndex >= 0) + if (newToStateIndex >= 0) { - animationStateTransition.AnimationStateId = transitionRequest.AnimationStateId; - animationStateTransition.TransitionDuration = transitionDuration; + animationStateTransition = new AnimationStateTransition + { + AnimationStateId = transitionRequest.AnimationStateId, + TransitionDuration = transitionDuration, + }; } transitionRequest = AnimationStateTransitionRequest.Null; } - else - { - toAnimationStateIndex = animationStates.IdToIndex((byte)animationStateTransition.AnimationStateId); - //Check if the current transition has ended - if (toAnimationStateIndex >= 0) - { - if (animationStateTransition.HasEnded(animationStates[toAnimationStateIndex])) - { - animationCurrentState = AnimationCurrentState.New(animationStateTransition.AnimationStateId); - animationStateTransition = AnimationStateTransition.Null; - } - } - } + var toAnimationStateIndex = animationStates.IdToIndex((byte)animationStateTransition.AnimationStateId); + //Execute blend if (toAnimationStateIndex >= 0) { + //Check if the current transition has ended + if (animationStateTransition.HasEnded(animationStates[toAnimationStateIndex])) + { + animationCurrentState = + AnimationCurrentState.New(animationStateTransition.AnimationStateId); + animationStateTransition = AnimationStateTransition.Null; + } + var toAnimationState = animationStates[toAnimationStateIndex]; if (mathex.iszero(animationStateTransition.TransitionDuration)) @@ -71,7 +71,7 @@ ref DynamicBuffer animationStates else { toAnimationState.Weight = math.clamp(toAnimationState.Time / - animationStateTransition.TransitionDuration, 0, 1); + animationStateTransition.TransitionDuration, 0, 1); } animationStates[toAnimationStateIndex] = toAnimationState; @@ -89,7 +89,8 @@ ref DynamicBuffer animationStates } } - Assert.IsFalse(mathex.iszero(sumWeights), "Remaining weights are zero. Did AnimationStates not get cleaned up?"); + Assert.IsFalse(mathex.iszero(sumWeights), + "Remaining weights are zero. Did AnimationStates not get cleaned up?"); var targetWeight = 1 - toAnimationState.Weight; var inverseSumWeights = targetWeight / sumWeights; @@ -102,6 +103,11 @@ ref DynamicBuffer animationStates animationStates[i] = animationState; } } + + for (var i = 0; i < animationStates.Length; i++) + { + var animationState = animationStates[i]; + } } } } diff --git a/Runtime/Systems/UpdateStateMachineJob.cs b/Runtime/Systems/UpdateStateMachineJob.cs index 0194686..a3ff626 100644 --- a/Runtime/Systems/UpdateStateMachineJob.cs +++ b/Runtime/Systems/UpdateStateMachineJob.cs @@ -4,6 +4,7 @@ using Unity.Burst; using Unity.Entities; using Unity.Profiling; +using UnityEngine; namespace DMotion { @@ -21,17 +22,16 @@ internal void Execute( ref DynamicBuffer clipSamplers, ref DynamicBuffer animationStates, in AnimationCurrentState animationCurrentState, - in DynamicBuffer boolParameters + in AnimationStateTransition animationStateTransition, + in DynamicBuffer boolParameters, + in DynamicBuffer intParameters ) { using var scope = Marker.Auto(); ref var stateMachineBlob = ref stateMachine.StateMachineBlob.Value; - var shouldStateMachineBeActive = !animationCurrentState.IsValid || - stateMachineTransitionRequest.IsRequested || - animationCurrentState.AnimationStateId == stateMachine.CurrentState.AnimationStateId; - - if (!shouldStateMachineBeActive) + if (!ShouldStateMachineBeActive(animationCurrentState, animationStateTransition, + stateMachineTransitionRequest, stateMachine.CurrentState)) { return; } @@ -65,13 +65,14 @@ in DynamicBuffer boolParameters { if (stateMachineTransitionRequest.IsRequested) { - var isCurrentStateActive = animationCurrentState.AnimationStateId == stateMachine.CurrentState.AnimationStateId; + var isCurrentStateActive = animationCurrentState.AnimationStateId == + stateMachine.CurrentState.AnimationStateId; // we're already playing our current state if (!isCurrentStateActive) { var isCurrentStateAnimationStateAlive = animationStates.ExistsWithId((byte)stateMachine.CurrentState.AnimationStateId); - + if (!isCurrentStateAnimationStateAlive) { //create a new animationState state for us to transition to @@ -92,7 +93,7 @@ in DynamicBuffer boolParameters TransitionDuration = stateMachineTransitionRequest.TransitionDuration }; } - + stateMachineTransitionRequest = AnimationStateMachineTransitionRequest.Null; } } @@ -100,13 +101,14 @@ in DynamicBuffer boolParameters //Evaluate transitions { //we really expect this guy to exist - var currentStateAnimationState = - animationStates.GetWithId((byte) stateMachine.CurrentState.AnimationStateId); - + var currentStateAnimationState = + animationStates.GetWithId((byte)stateMachine.CurrentState.AnimationStateId); + var shouldStartTransition = EvaluateTransitions( currentStateAnimationState, ref stateMachine.CurrentStateBlob, boolParameters, + intParameters, out var transitionIndex); if (shouldStartTransition) @@ -131,6 +133,26 @@ in DynamicBuffer boolParameters } } + public static bool ShouldStateMachineBeActive(in AnimationCurrentState animationCurrentState, + in AnimationStateTransition animationStateTransition, + in AnimationStateMachineTransitionRequest stateMachineTransitionRequest, + in StateMachineStateRef currentState) + { + return !animationCurrentState.IsValid || + stateMachineTransitionRequest.IsRequested || + ( + currentState.IsValid && animationCurrentState.IsValid && + animationCurrentState.AnimationStateId == + currentState.AnimationStateId + ) || + ( + currentState.IsValid && animationStateTransition.IsValid && + animationStateTransition.AnimationStateId == + currentState.AnimationStateId + ); + } + + private StateMachineStateRef CreateState(short stateIndex, BlobAssetReference stateMachineBlob, BlobAssetReference clipsBlob, @@ -151,7 +173,7 @@ private StateMachineStateRef CreateState(short stateIndex, { case StateType.Single: var singleClipState = SingleClipStateUtils.NewForStateMachine( - (byte)state.StateIndex, + (byte)stateIndex, stateMachineBlob, clipsBlob, clipEventsBlob, @@ -161,7 +183,7 @@ private StateMachineStateRef CreateState(short stateIndex, break; case StateType.LinearBlend: var linearClipState = LinearBlendStateUtils.NewForStateMachine( - (byte)state.StateIndex, + (byte)stateIndex, stateMachineBlob, clipsBlob, clipEventsBlob, @@ -181,11 +203,13 @@ private StateMachineStateRef CreateState(short stateIndex, [BurstCompile] [MethodImpl(MethodImplOptions.AggressiveInlining)] private bool EvaluateTransitions(in AnimationState animation, ref AnimationStateBlob state, - in DynamicBuffer boolParameters, out short transitionIndex) + in DynamicBuffer boolParameters, + in DynamicBuffer intParameters, + out short transitionIndex) { for (short i = 0; i < state.Transitions.Length; i++) { - if (EvaluateTransitionGroup(animation, ref state.Transitions[i], boolParameters)) + if (EvaluateTransitionGroup(animation, ref state.Transitions[i], boolParameters, intParameters)) { transitionIndex = i; return true; @@ -199,19 +223,33 @@ private bool EvaluateTransitions(in AnimationState animation, ref AnimationState [BurstCompile] [MethodImpl(MethodImplOptions.AggressiveInlining)] private bool EvaluateTransitionGroup(in AnimationState animation, ref StateOutTransitionGroup transitionGroup, - in DynamicBuffer boolParameters) + in DynamicBuffer boolParameters, + in DynamicBuffer intParameters) { if (transitionGroup.HasEndTime && animation.Time < transitionGroup.TransitionEndTime) { return false; } - ref var boolTransitions = ref transitionGroup.BoolTransitions; var shouldTriggerTransition = transitionGroup.HasAnyConditions || transitionGroup.HasEndTime; - for (var i = 0; i < boolTransitions.Length; i++) + + //evaluate bool transitions { - var transition = boolTransitions[i]; - shouldTriggerTransition &= transition.Evaluate(boolParameters[transition.ParameterIndex]); + ref var boolTransitions = ref transitionGroup.BoolTransitions; + for (var i = 0; i < boolTransitions.Length; i++) + { + var transition = boolTransitions[i]; + shouldTriggerTransition &= transition.Evaluate(boolParameters[transition.ParameterIndex]); + } + } + //evaluate int transitions + { + ref var intTransitions = ref transitionGroup.IntTransitions; + for (var i = 0; i < intTransitions.Length; i++) + { + var transition = intTransitions[i]; + shouldTriggerTransition &= transition.Evaluate(intParameters[transition.ParameterIndex]); + } } return shouldTriggerTransition; diff --git a/Runtime/Utils/IEnumerableUtils.cs b/Runtime/Utils/IEnumerableUtils.cs new file mode 100644 index 0000000..0fb2e05 --- /dev/null +++ b/Runtime/Utils/IEnumerableUtils.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace DMotion +{ + public static class IEnumerableUtils + { + public static int FindIndex(this IEnumerable source, Predicate predicate) + { + return source.ToList().FindIndex(predicate); + } + } +} \ No newline at end of file diff --git a/Runtime/Utils/IEnumerableUtils.cs.meta b/Runtime/Utils/IEnumerableUtils.cs.meta new file mode 100644 index 0000000..6b0fa32 --- /dev/null +++ b/Runtime/Utils/IEnumerableUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 741ba4bf69bf474da3b0b7ce114b2b16 +timeCreated: 1665628814 \ No newline at end of file diff --git a/Runtime/Utils/RectUtils.cs b/Runtime/Utils/RectUtils.cs new file mode 100644 index 0000000..324ce08 --- /dev/null +++ b/Runtime/Utils/RectUtils.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace DMotion +{ + public static class RectUtils + { + public static Rect ShrinkRight(this Rect r, float delta) + { + r.width -= delta; + return r; + } + + public static Rect ShrinkLeft(this Rect r, float delta) + { + r.xMin += delta; + return r; + } + } +} \ No newline at end of file diff --git a/Runtime/Utils/RectUtils.cs.meta b/Runtime/Utils/RectUtils.cs.meta new file mode 100644 index 0000000..ffa7f9f --- /dev/null +++ b/Runtime/Utils/RectUtils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d30d46dc09864c99a13a6c66c5b7e5b7 +timeCreated: 1665543850 \ No newline at end of file diff --git a/Runtime/Utils/StateMachineParameterUtils.cs b/Runtime/Utils/StateMachineParameterUtils.cs index c2abc7e..fb3782b 100644 --- a/Runtime/Utils/StateMachineParameterUtils.cs +++ b/Runtime/Utils/StateMachineParameterUtils.cs @@ -1,66 +1,45 @@ -using Unity.Burst; +using System.Runtime.CompilerServices; +using Unity.Burst; using Unity.Collections; using Unity.Entities; -using UnityEditor; namespace DMotion { [BurstCompile] - public static class StateMachineParameterUtils + public struct StateMachineParameterRef + where TBuffer : struct, IStateMachineParameter + where TValue : struct { - public static int HashToIndex(this DynamicBuffer parameters, int hash) - { - for (var i = 0; i < parameters.Length; i++) - { - if (parameters[i].Hash == hash) - { - return i; - } - } + public sbyte Index; - return -1; - } - - public static void SetParameter(this DynamicBuffer parameters, int hash, bool value) + public void SetValue(DynamicBuffer parameters, TValue value) { - var index = parameters.HashToIndex(hash); - if (index >= 0) + if (Index >= 0 && Index < parameters.Length) { - var p = parameters[index]; + var p = parameters[Index]; p.Value = value; - parameters[index] = p; + parameters[Index] = p; } } - - public static void SetParameter(this DynamicBuffer parameters, FixedString32Bytes name, - bool value) + public bool TryGetValue(DynamicBuffer parameters, out TValue value) { - var hash = name.GetHashCode(); - parameters.SetParameter(hash, value); - } - - public static bool TryGetValue(this DynamicBuffer parameters, int hash, out bool value) - { - var index = parameters.HashToIndex(hash); - if (index >= 0) + if (Index >= 0 && Index < parameters.Length) { - value = parameters[index].Value; + value = parameters[Index].Value; return true; } value = default; return false; } + } - public static bool TryGetValue(this DynamicBuffer parameters, FixedString32Bytes name, - out bool value) - { - var hash = name.GetHashCode(); - return parameters.TryGetValue(hash, out value); - } - - public static int HashToIndex(this DynamicBuffer parameters, int hash) + [BurstCompile] + public static class StateMachineParameterUtils + { + public static int HashToIndex(this DynamicBuffer parameters, int hash) + where T : struct, IHasHash { for (var i = 0; i < parameters.Length; i++) { @@ -73,7 +52,15 @@ public static int HashToIndex(this DynamicBuffer parameters, int return -1; } - public static void SetParameter(this DynamicBuffer parameters, int hash, float value) + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int GetHashCode(string name) + { + return ((FixedString64Bytes) name).GetHashCode(); + } + + public static void SetParameter(this DynamicBuffer parameters, int hash, TValue value) + where TBuffer : struct, IStateMachineParameter + where TValue : struct { var index = parameters.HashToIndex(hash); if (index >= 0) @@ -84,26 +71,19 @@ public static void SetParameter(this DynamicBuffer parameters, i } } - - public static void SetParameter(this DynamicBuffer parameters, FixedString32Bytes name, - float value) + public static void SetParameter(this DynamicBuffer parameters, + FixedString64Bytes name, TValue value) + where TBuffer : struct, IStateMachineParameter + where TValue : struct { var hash = name.GetHashCode(); parameters.SetParameter(hash, value); } - public static void IncrementParameter(this DynamicBuffer parameters, int hash, float increment) - { - var index = parameters.HashToIndex(hash); - if (index >= 0) - { - var p = parameters[index]; - p.Value += increment; - parameters[index] = p; - } - } - - public static bool TryGetValue(this DynamicBuffer parameters, int hash, out float value) + public static bool TryGetValue(this DynamicBuffer parameters, int hash, + out TValue value) + where TBuffer : struct, IStateMachineParameter + where TValue : struct { var index = parameters.HashToIndex(hash); if (index >= 0) @@ -116,16 +96,33 @@ public static bool TryGetValue(this DynamicBuffer parameters, in return false; } - public static bool TryGetValue(this DynamicBuffer parameters, FixedString32Bytes name, - out float value) + public static bool TryGetValue(this DynamicBuffer parameters, FixedString64Bytes name, + out TValue value) + where TBuffer : struct, IStateMachineParameter + where TValue : struct { var hash = name.GetHashCode(); return parameters.TryGetValue(hash, out value); } - public static int GetHashCode(string name) + public static StateMachineParameterRef CreateRef(this DynamicBuffer parameters, + int hash) + where TBuffer : struct, IStateMachineParameter + where TValue : struct + { + return new StateMachineParameterRef() + { + Index = (sbyte) parameters.HashToIndex(hash) + }; + } + + public static StateMachineParameterRef CreateRef(this DynamicBuffer parameters, + FixedString64Bytes name) + where TBuffer : struct, IStateMachineParameter + where TValue : struct { - return name.GetHashCode(); + var hash = name.GetHashCode(); + return parameters.CreateRef(hash); } } } \ No newline at end of file diff --git a/Samples~/All Samples/1 - Complete State Machine/Data/Events.meta b/Samples~/All Samples/1 - Complete State Machine/Data/Events.meta index bed1d9d..51e86d6 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Data/Events.meta +++ b/Samples~/All Samples/1 - Complete State Machine/Data/Events.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 88ced5cb3e943084fac011d7d4b8922d +guid: 222f1ddbd88987e43adaf6100e416c2c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_EndAttack.asset.meta b/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_EndAttack.asset.meta index 3fc00a3..9bb5271 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_EndAttack.asset.meta +++ b/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_EndAttack.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 505709e020e238c4ea9dcfe99568b50b +guid: 3eb906635d00fcc4cb019f2c4994ecbe NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_Footstep.asset.meta b/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_Footstep.asset.meta index 7195033..a62ccbd 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_Footstep.asset.meta +++ b/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_Footstep.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 76a22800f4761b44b8c6343a5d264b3a +guid: 97a9ae9f149a5304db973055f6f910ad NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_StarAttack.asset.meta b/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_StarAttack.asset.meta index 374d676..fc778eb 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_StarAttack.asset.meta +++ b/Samples~/All Samples/1 - Complete State Machine/Data/Events/EV_StarAttack.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8be247de0faf6724b8d8bbf96f50d27f +guid: 52491199156c4a9418e60773b51b7109 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/1 - Complete State Machine/Data/StateMachine/StateMachine_Example.asset b/Samples~/All Samples/1 - Complete State Machine/Data/StateMachine/StateMachine_Example.asset index a14be70..345f7cc 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Data/StateMachine/StateMachine_Example.asset +++ b/Samples~/All Samples/1 - Complete State Machine/Data/StateMachine/StateMachine_Example.asset @@ -12,7 +12,55 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3bf49d2668cb4e4e8a67a3039a2ecc63, type: 3} m_Name: Attack m_EditorClassIdentifier: ---- !u!114 &-824457067591523315 +--- !u!114 &-8277666033390285027 +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: f5d0933cd30548669565cf8c60749648, type: 3} + m_Name: Movement - Crouching + m_EditorClassIdentifier: + Loop: 1 + Speed: 1 + OutTransitions: + - ToState: {fileID: 84364453544067473} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: -3481804438300072411} + ComparisonValue: 0 + ComparisonMode: 0 + - ToState: {fileID: -6642729254166906212} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: -3481804438300072411} + ComparisonValue: 2 + ComparisonMode: 0 + - ToState: {fileID: -7085936119884536874} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: 7344316594631064389} + ComparisonValue: 1 + ComparisonMode: 0 + StateEditorData: + GraphPosition: {x: 768.80005, y: 323.19998} + Guid: e4f7da2ce36e05b41898e833848fdba5 + BlendClips: + - Clip: {fileID: 11400000, guid: 8bc0859fef61c7945863b7da14be93cf, type: 2} + Threshold: 0 + - Clip: {fileID: 11400000, guid: ef6cd90edeb422246ada0da2f39d6433, type: 2} + Threshold: 0.2 + BlendParameter: {fileID: 3089010798117439694} +--- !u!114 &-7085936119884536874 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -22,20 +70,102 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 49a657166d644c459a151994885f8ecd, type: 3} - m_Name: Attack + m_Name: IsFalling m_EditorClassIdentifier: Loop: 1 Speed: 1 OutTransitions: - ToState: {fileID: 84364453544067473} - HasEndTime: 1 - EndTime: 0.85 - NormalizedTransitionDuration: 0.15 - Conditions: [] + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: 7344316594631064389} + ComparisonValue: 0 + ComparisonMode: 1 + - ToState: {fileID: -8277666033390285027} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: 7344316594631064389} + ComparisonValue: 0 + ComparisonMode: 1 + - ToState: {fileID: -6642729254166906212} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: 7344316594631064389} + ComparisonValue: 0 + ComparisonMode: 1 StateEditorData: - GraphPosition: {x: 720.6, y: 421.80002} - Guid: 5d2eb3237faf73745acfbee41c66ea28 - Clip: {fileID: 11400000, guid: 411918f1c0037bd4da6262a82555471d, type: 2} + GraphPosition: {x: 612.8, y: 89.40289} + Guid: 91b9b5e2435e0d241945e7f8a1c32fb4 + Clip: {fileID: 11400000, guid: 6b1e121bbab943847aa41e3b270da004, type: 2} +--- !u!114 &-6642729254166906212 +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: f5d0933cd30548669565cf8c60749648, type: 3} + m_Name: Movement - Strafing + m_EditorClassIdentifier: + Loop: 1 + Speed: 1 + OutTransitions: + - ToState: {fileID: 84364453544067473} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: -3481804438300072411} + ComparisonValue: 0 + ComparisonMode: 0 + - ToState: {fileID: -8277666033390285027} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: -3481804438300072411} + ComparisonValue: 1 + ComparisonMode: 0 + - ToState: {fileID: -7085936119884536874} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: 7344316594631064389} + ComparisonValue: 1 + ComparisonMode: 0 + StateEditorData: + GraphPosition: {x: 599.99994, y: 512.8049} + Guid: 8dd74e6b0bf96ed4b966a17fc2ba7c02 + BlendClips: + - Clip: {fileID: 11400000, guid: 65fa5c504679b5f4a8d032b3c07acb70, type: 2} + Threshold: 0 + - Clip: {fileID: 11400000, guid: 85ae3405e5633d04cbf874097cf3f38d, type: 2} + Threshold: 0.2 + BlendParameter: {fileID: 3089010798117439694} +--- !u!114 &-3481804438300072411 +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: dedf630c4bbf4fc39cb1d1b528eb9a91, type: 3} + m_Name: MovementMode + m_EditorClassIdentifier: + EnumType: + AssemblyQualifiedTypeName: DMotion.Samples.CompleteStateMachine.MovementMode, + Samples.CompleStateMachine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -51,12 +181,14 @@ MonoBehaviour: DefaultState: {fileID: 84364453544067473} States: - {fileID: 84364453544067473} - - {fileID: 8907509821198412086} - - {fileID: -824457067591523315} + - {fileID: -7085936119884536874} + - {fileID: -8277666033390285027} + - {fileID: -6642729254166906212} Parameters: - {fileID: 7344316594631064389} - {fileID: 3089010798117439694} - {fileID: -8447519872970154950} + - {fileID: -3481804438300072411} --- !u!114 &84364453544067473 MonoBehaviour: m_ObjectHideFlags: 0 @@ -67,26 +199,37 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: f5d0933cd30548669565cf8c60749648, type: 3} - m_Name: Locomotion + m_Name: Movement - Normal m_EditorClassIdentifier: Loop: 1 Speed: 1 OutTransitions: - - ToState: {fileID: 8907509821198412086} - HasEndTime: 1 - EndTime: 0.76 - NormalizedTransitionDuration: 0.15 + - ToState: {fileID: -8277666033390285027} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 Conditions: - - Parameter: {fileID: 7344316594631064389} + - Parameter: {fileID: -3481804438300072411} ComparisonValue: 1 ComparisonMode: 0 - - ToState: {fileID: -824457067591523315} + - ToState: {fileID: -6642729254166906212} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: -3481804438300072411} + ComparisonValue: 2 + ComparisonMode: 0 + - ToState: {fileID: -7085936119884536874} HasEndTime: 0 EndTime: 0 - NormalizedTransitionDuration: 0.15 - Conditions: [] + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: 7344316594631064389} + ComparisonValue: 1 + ComparisonMode: 0 StateEditorData: - GraphPosition: {x: 484.59998, y: 324} + GraphPosition: {x: 435.99994, y: 323.19998} Guid: 72e1f4e820f444942bd1743b72d9c91f BlendClips: - Clip: {fileID: 11400000, guid: 2d8b5b7a11d7f3c418b9a6677c0cc292, type: 2} @@ -120,30 +263,3 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3bf49d2668cb4e4e8a67a3039a2ecc63, type: 3} m_Name: IsFalling m_EditorClassIdentifier: ---- !u!114 &8907509821198412086 -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: 49a657166d644c459a151994885f8ecd, type: 3} - m_Name: IsFalling - m_EditorClassIdentifier: - Loop: 1 - Speed: 1 - OutTransitions: - - ToState: {fileID: 84364453544067473} - HasEndTime: 0 - EndTime: 0 - NormalizedTransitionDuration: 0.15 - Conditions: - - Parameter: {fileID: 7344316594631064389} - ComparisonValue: 0 - ComparisonMode: 1 - StateEditorData: - GraphPosition: {x: 699.6, y: 188.2} - Guid: 07cc65759a0b3ec4cb52846346ab263c - Clip: {fileID: 11400000, guid: 2fa5654cbbd35e54f9a7b6cf79f67e1d, type: 2} diff --git a/Samples~/All Samples/1 - Complete State Machine/Scenes/Samples.CompleteStateMachine.unity b/Samples~/All Samples/1 - Complete State Machine/Scenes/Samples.CompleteStateMachine.unity index 8793242..5740eee 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Scenes/Samples.CompleteStateMachine.unity +++ b/Samples~/All Samples/1 - Complete State Machine/Scenes/Samples.CompleteStateMachine.unity @@ -213,6 +213,7 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1626386267} - {fileID: 1404455324} @@ -253,6 +254,7 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 324942482} m_Father: {fileID: 1626386267} @@ -260,7 +262,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 29.368164, y: -117.38132} + m_AnchoredPosition: {x: 29.368164, y: -173} m_SizeDelta: {x: 204.6238, y: 45.237396} m_Pivot: {x: 0, y: 1} --- !u!114 &224621537 @@ -373,6 +375,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1978098045} m_RootOrder: 0 @@ -420,6 +423,97 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 267797352} m_CullTransparentMesh: 1 +--- !u!1 &323048999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 323049000} + - component: {fileID: 323049003} + - component: {fileID: 323049002} + - component: {fileID: 323049001} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &323049000 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323048999} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 434174221} + m_Father: {fileID: 975249633} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -17, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &323049001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323048999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &323049002 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323048999} + m_CullTransparentMesh: 1 +--- !u!114 &323049003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323048999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 --- !u!1 &324942481 GameObject: m_ObjectHideFlags: 0 @@ -448,6 +542,7 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 224621536} m_RootOrder: 0 @@ -554,6 +649,133 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 324942481} m_CullTransparentMesh: 1 +--- !u!1 &381447525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 381447526} + - component: {fileID: 381447529} + - component: {fileID: 381447528} + - component: {fileID: 381447527} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &381447526 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381447525} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2040848108} + m_Father: {fileID: 975249633} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &381447527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381447525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1033812941} + m_HandleRect: {fileID: 1033812940} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &381447528 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381447525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &381447529 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 381447525} + m_CullTransparentMesh: 1 --- !u!1 &395671117 GameObject: m_ObjectHideFlags: 0 @@ -582,6 +804,7 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1487498090} m_RootOrder: 0 @@ -688,6 +911,43 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 395671117} m_CullTransparentMesh: 1 +--- !u!1 &434174220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 434174221} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &434174221 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 434174220} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 870245392} + m_Father: {fileID: 323049000} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 40.5526} + m_Pivot: {x: 0.5, y: 1} --- !u!1 &465900307 GameObject: m_ObjectHideFlags: 0 @@ -716,6 +976,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1178219824} m_RootOrder: 0 @@ -789,6 +1050,7 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 396149728647214367} m_Father: {fileID: 779924504} @@ -822,6 +1084,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 633491421} m_RootOrder: 0 @@ -954,6 +1217,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1510773209} m_Father: {fileID: 1178219824} @@ -990,6 +1254,7 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 518507033} - {fileID: 1178219824} @@ -1029,6 +1294,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1964653514} m_RootOrder: 0 @@ -1166,6 +1432,7 @@ Transform: m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 1 @@ -1182,8 +1449,15 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} m_Name: m_EditorClassIdentifier: + m_Version: 1 m_UsePipelineSettings: 1 ---- !u!1 &779924501 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} +--- !u!1 &708280064 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1191,74 +1465,526 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 779924504} - - component: {fileID: 779924505} - - component: {fileID: 779924502} - m_Layer: 0 - m_Name: Player + - component: {fileID: 708280065} + - component: {fileID: 708280067} + - component: {fileID: 708280066} + m_Layer: 5 + m_Name: Item Background m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &779924502 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 779924501} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 0df588d7d71e4d21bdae375f24c30b3f, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!4 &779924504 -Transform: +--- !u!224 &708280065 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 779924501} + m_GameObject: {fileID: 708280064} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 477280100} - m_Father: {fileID: 0} - m_RootOrder: 4 + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 870245392} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &779924505 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &708280066 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 779924501} + m_GameObject: {fileID: 708280064} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 37abc90a0c6245c682879fe569a86a6a, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: - animator: {fileID: 917321537} - startAttackEvent: {fileID: 11400000, guid: 8be247de0faf6724b8d8bbf96f50d27f, type: 2} - endAttackEvent: {fileID: 11400000, guid: 505709e020e238c4ea9dcfe99568b50b, type: 2} - footStepEvent: {fileID: 11400000, guid: 76a22800f4761b44b8c6343a5d264b3a, type: 2} - slashClipAsset: {fileID: 11400000, guid: 411918f1c0037bd4da6262a82555471d, type: 2} - circleSlashClipAsset: {fileID: 11400000, guid: 41a1290e6a5cb1a448ef4b0b5d7319a9, type: 2} ---- !u!95 &917321537 stripped -Animator: - m_CorrespondingSourceObject: {fileID: 3730951398196354805, guid: eebc1de96842acf4193aba1516831de6, type: 3} - m_PrefabInstance: {fileID: 396149728647214366} - m_PrefabAsset: {fileID: 0} ---- !u!1 &963194225 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: + m_Material: {fileID: 0} + m_Color: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &708280067 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 708280064} + m_CullTransparentMesh: 1 +--- !u!1 &711293329 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 711293330} + - component: {fileID: 711293332} + - component: {fileID: 711293331} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &711293330 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 711293329} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 870245392} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 10, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &711293331 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 711293329} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &711293332 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 711293329} + m_CullTransparentMesh: 1 +--- !u!1 &750788140 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 750788141} + - component: {fileID: 750788143} + - component: {fileID: 750788142} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &750788141 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 750788140} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1923716238} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &750788142 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 750788140} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &750788143 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 750788140} + m_CullTransparentMesh: 1 +--- !u!1 &761811937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 761811940} + - component: {fileID: 761811939} + - component: {fileID: 761811938} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &761811938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761811937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Normal + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 19 + m_fontSizeBase: 19 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &761811939 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761811937} + m_CullTransparentMesh: 1 +--- !u!224 &761811940 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 761811937} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1923716238} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &779924501 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 779924504} + - component: {fileID: 779924505} + - component: {fileID: 779924502} + m_Layer: 0 + m_Name: Player + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &779924502 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779924501} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0df588d7d71e4d21bdae375f24c30b3f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &779924504 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779924501} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 477280100} + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &779924505 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 779924501} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 37abc90a0c6245c682879fe569a86a6a, type: 3} + m_Name: + m_EditorClassIdentifier: + animator: {fileID: 917321537} + startAttackEvent: {fileID: 11400000, guid: 8be247de0faf6724b8d8bbf96f50d27f, type: 2} + endAttackEvent: {fileID: 11400000, guid: 505709e020e238c4ea9dcfe99568b50b, type: 2} + footStepEvent: {fileID: 11400000, guid: 76a22800f4761b44b8c6343a5d264b3a, type: 2} + slashClipAsset: {fileID: 11400000, guid: 411918f1c0037bd4da6262a82555471d, type: 2} + circleSlashClipAsset: {fileID: 11400000, guid: 41a1290e6a5cb1a448ef4b0b5d7319a9, type: 2} +--- !u!1 &870245391 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 870245392} + - component: {fileID: 870245393} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &870245392 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870245391} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 708280065} + - {fileID: 711293330} + - {fileID: 1910387087} + m_Father: {fileID: 434174221} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 28} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &870245393 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870245391} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 708280066} + toggleTransition: 1 + graphic: {fileID: 711293331} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!95 &917321537 stripped +Animator: + m_CorrespondingSourceObject: {fileID: 3730951398196354805, guid: eebc1de96842acf4193aba1516831de6, type: 3} + m_PrefabInstance: {fileID: 396149728647214366} + m_PrefabAsset: {fileID: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: - component: {fileID: 963194228} - component: {fileID: 963194227} - component: {fileID: 963194226} @@ -1331,6 +2057,7 @@ Transform: m_LocalRotation: {x: 0.09719045, y: -0.89665496, z: 0.24497248, w: 0.35574213} m_LocalPosition: {x: 2.0955925, y: 3.1914287, z: 2.6977746} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0 @@ -1368,6 +2095,191 @@ MonoBehaviour: m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 m_Version: 2 +--- !u!1 &975249632 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 975249633} + - component: {fileID: 975249636} + - component: {fileID: 975249635} + - component: {fileID: 975249634} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &975249633 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975249632} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 323049000} + - {fileID: 381447526} + m_Father: {fileID: 1923716238} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &975249634 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975249632} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 434174221} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 323049000} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 381447527} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &975249635 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975249632} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &975249636 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 975249632} + m_CullTransparentMesh: 1 +--- !u!1 &1033812939 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1033812940} + - component: {fileID: 1033812942} + - component: {fileID: 1033812941} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1033812940 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033812939} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2040848108} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1033812941 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033812939} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1033812942 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1033812939} + m_CullTransparentMesh: 1 --- !u!1 &1178219823 GameObject: m_ObjectHideFlags: 0 @@ -1395,6 +2307,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 465900308} - {fileID: 565945850} @@ -1497,6 +2410,7 @@ Transform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 26.986052, y: -6.288682, z: 12.998284} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 5 @@ -1529,6 +2443,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1888105495} m_RootOrder: 1 @@ -1612,6 +2527,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 m_HorizontalAxis: Horizontal m_VerticalAxis: Vertical m_SubmitButton: Submit @@ -1644,6 +2560,7 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 2 @@ -1676,6 +2593,7 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 76018128} m_RootOrder: 1 @@ -1701,6 +2619,7 @@ MonoBehaviour: AtkButton: {fileID: 224621537} AtkRmButton: {fileID: 1487498091} IsFallingToggle: {fileID: 1888105496} + MovementModeDropdown: {fileID: 1923716237} --- !u!114 &1404455326 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1742,6 +2661,7 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 395671118} m_Father: {fileID: 1626386267} @@ -1749,7 +2669,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 29.368164, y: -170.66928} + m_AnchoredPosition: {x: 29.368164, y: -226.28793} m_SizeDelta: {x: 204.6238, y: 45.237396} m_Pivot: {x: 0, y: 1} --- !u!114 &1487498091 @@ -1862,6 +2782,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 565945850} m_RootOrder: 0 @@ -1937,11 +2858,13 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 633491421} - {fileID: 224621536} - {fileID: 1487498090} - {fileID: 1888105495} + - {fileID: 1923716238} m_Father: {fileID: 76018128} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -2015,6 +2938,7 @@ RectTransform: m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1964653514} - {fileID: 1206544456} @@ -2074,6 +2998,281 @@ MonoBehaviour: m_PersistentCalls: m_Calls: [] m_IsOn: 0 +--- !u!1 &1910387084 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1910387087} + - component: {fileID: 1910387086} + - component: {fileID: 1910387085} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1910387085 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1910387084} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Option + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 19 + m_fontSizeBase: 19 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1910387086 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1910387084} + m_CullTransparentMesh: 1 +--- !u!224 &1910387087 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1910387084} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 870245392} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: -0.5} + m_SizeDelta: {x: -30, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1923716236 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1923716238} + - component: {fileID: 1923716240} + - component: {fileID: 1923716239} + - component: {fileID: 1923716237} + m_Layer: 5 + m_Name: MovementModeDropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1923716237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1923716236} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7b743370ac3e4ec2a1668f5455a8ef8a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1923716239} + m_Template: {fileID: 975249633} + m_CaptionText: {fileID: 761811938} + m_CaptionImage: {fileID: 0} + m_Placeholder: {fileID: 0} + m_ItemText: {fileID: 1910387085} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: + - m_Text: Normal + m_Image: {fileID: 0} + - m_Text: Crouching + m_Image: {fileID: 0} + - m_Text: Strafing + m_Image: {fileID: 0} + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_AlphaFadeSpeed: 0.15 +--- !u!224 &1923716238 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1923716236} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 761811940} + - {fileID: 750788141} + - {fileID: 975249633} + m_Father: {fileID: 1626386267} + m_RootOrder: 4 + 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_AnchoredPosition: {x: -38.685, y: 48.7798} + m_SizeDelta: {x: 204.63, y: 40.4403} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1923716239 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1923716236} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1923716240 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1923716236} + m_CullTransparentMesh: 1 --- !u!1 &1964653513 GameObject: m_ObjectHideFlags: 0 @@ -2102,6 +3301,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 664745979} m_Father: {fileID: 1888105495} @@ -2176,6 +3376,7 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 267797353} m_Father: {fileID: 1178219824} @@ -2186,6 +3387,43 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -20, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2040848107 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2040848108} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2040848108 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2040848107} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1033812940} + m_Father: {fileID: 381447526} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1001 &396149728647214366 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Samples~/All Samples/1 - Complete State Machine/Scripts/AttackSystem.cs b/Samples~/All Samples/1 - Complete State Machine/Scripts/AttackSystem.cs index fa41694..43d1887 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Scripts/AttackSystem.cs +++ b/Samples~/All Samples/1 - Complete State Machine/Scripts/AttackSystem.cs @@ -13,8 +13,8 @@ protected override void OnUpdate() { Entities.ForEach((in AttackWindow attackWindow) => { - FixedString32Bytes open = attackWindow.IsOpen ? "Open" : "Closed"; - Debug.Log(FixedString.Format("Attack window is: {0}", open)); + // FixedString32Bytes open = attackWindow.IsOpen ? "Open" : "Closed"; + // Debug.Log(FixedString.Format("Attack window is: {0}", open)); }).Schedule(); } } diff --git a/Samples~/All Samples/1 - Complete State Machine/Scripts/StateMachineEventsSystem.cs b/Samples~/All Samples/1 - Complete State Machine/Scripts/StateMachineEventsSystem.cs index 0a9419a..516e161 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Scripts/StateMachineEventsSystem.cs +++ b/Samples~/All Samples/1 - Complete State Machine/Scripts/StateMachineEventsSystem.cs @@ -6,6 +6,13 @@ namespace DMotion.Samples.CompleteStateMachine { + public enum MovementMode + { + Normal, + Crouching, + Strafing, + } + public struct StateMachineExampleEvents : IComponentData { public int StartAttackEventHash; diff --git a/Samples~/All Samples/1 - Complete State Machine/Scripts/UI/StateMachineExampleUI.cs b/Samples~/All Samples/1 - Complete State Machine/Scripts/UI/StateMachineExampleUI.cs index 678dfc0..197b05f 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Scripts/UI/StateMachineExampleUI.cs +++ b/Samples~/All Samples/1 - Complete State Machine/Scripts/UI/StateMachineExampleUI.cs @@ -11,5 +11,6 @@ public class StateMachineExampleUI : IComponentData public Button AtkButton; public Button AtkRmButton; public Toggle IsFallingToggle; + public TMP_Dropdown MovementModeDropdown; } } \ No newline at end of file diff --git a/Samples~/All Samples/1 - Complete State Machine/Scripts/UI/StateMachineExampleUISystem.cs b/Samples~/All Samples/1 - Complete State Machine/Scripts/UI/StateMachineExampleUISystem.cs index b267c70..cacfa7c 100644 --- a/Samples~/All Samples/1 - Complete State Machine/Scripts/UI/StateMachineExampleUISystem.cs +++ b/Samples~/All Samples/1 - Complete State Machine/Scripts/UI/StateMachineExampleUISystem.cs @@ -1,12 +1,12 @@ -using DMotion; -using Unity.Entities; +using Unity.Entities; namespace DMotion.Samples.CompleteStateMachine { public partial class StateMachineExampleUISystem : SystemBase { - private static int IsFallingHash => StateMachineParameterUtils.GetHashCode("IsFalling"); - private static int SpeedHash => StateMachineParameterUtils.GetHashCode("Speed"); + private static readonly int IsFallingHash = StateMachineParameterUtils.GetHashCode("IsFalling"); + private static readonly int SpeedHash = StateMachineParameterUtils.GetHashCode("Speed"); + private static readonly int MovementModeHash = StateMachineParameterUtils.GetHashCode("MovementMode"); private bool playCircleSlash = false; private bool playSlash = false; @@ -40,14 +40,17 @@ protected override void OnUpdate() { var oneShots = GetSingleton(); var stateMachineUI = this.GetSingleton(); + Entities .ForEach(( ref PlayOneShotRequest playOneShot, ref DynamicBuffer blendParameters, - ref DynamicBuffer boolParameters) => + ref DynamicBuffer boolParameters, + ref DynamicBuffer intParameters) => { boolParameters.SetParameter(IsFallingHash, stateMachineUI.IsFallingToggle.isOn); blendParameters.SetParameter(SpeedHash, stateMachineUI.BlendSlider.value); + intParameters.SetParameter(MovementModeHash, stateMachineUI.MovementModeDropdown.value); if (playSlash) { diff --git a/Samples~/All Samples/2 - Stress Test/Armature_StressTest.fbx.meta b/Samples~/All Samples/2 - Stress Test/Armature_StressTest.fbx.meta index 130e7ad..ec6cb8a 100644 --- a/Samples~/All Samples/2 - Stress Test/Armature_StressTest.fbx.meta +++ b/Samples~/All Samples/2 - Stress Test/Armature_StressTest.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e90d5325d4cbbeb409d40e50905ffd9e +guid: 51154973bc951924486a64a51c1f9cc9 ModelImporter: serializedVersion: 20200 internalIDToNameTable: [] diff --git a/Samples~/All Samples/Common/Animations.meta b/Samples~/All Samples/Common/Animations.meta index c559d0c..9b180ea 100644 --- a/Samples~/All Samples/Common/Animations.meta +++ b/Samples~/All Samples/Common/Animations.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 375c6a1419ecaa34f950d4d17542c0d4 +guid: 3995f5e1cb2f4ef438fc4b3da20c5838 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/All Samples/Common/Animations/Armature@Crouched Walking.fbx b/Samples~/All Samples/Common/Animations/Armature@Crouched Walking.fbx new file mode 100644 index 0000000..6de088b Binary files /dev/null and b/Samples~/All Samples/Common/Animations/Armature@Crouched Walking.fbx differ diff --git a/Samples~/All Samples/Common/Animations/Armature@Crouched Walking.fbx.meta b/Samples~/All Samples/Common/Animations/Armature@Crouched Walking.fbx.meta new file mode 100644 index 0000000..f0f3a98 --- /dev/null +++ b/Samples~/All Samples/Common/Animations/Armature@Crouched Walking.fbx.meta @@ -0,0 +1,925 @@ +fileFormatVersion: 2 +guid: a7eeeaa61ff6df14d880d50f7579c105 +ModelImporter: + serializedVersion: 21300 + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Crouched Walking + - first: + 74: -203655887218126122 + second: Crouching - Walking + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 1 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: Crouching - Walking + takeName: mixamo.com + internalID: 0 + firstFrame: 0 + lastFrame: 31 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_UpperLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_LowerLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Foot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Toes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: UpperChest + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Shoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_UpperArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_LowerArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Hand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Shoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_UpperArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_LowerArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Hand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_UpperLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_LowerLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Foot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Toes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbProximal + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbIntermediate + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbDistal + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexProximal + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexIntermediate + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexDistal + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleProximal + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleIntermediate + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleDistal + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingProximal + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingIntermediate + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingDistal + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyProximal + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyIntermediate + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyDistal + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbProximal + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbIntermediate + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbDistal + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexProximal + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexIntermediate + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexDistal + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleProximal + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleIntermediate + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleDistal + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingProximal + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingIntermediate + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingDistal + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyProximal + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyIntermediate + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyDistal + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: Mannequin(Clone) + parentName: + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Geometry + parentName: Mannequin(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Mannequin_Mesh + parentName: Geometry + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Skeleton + parentName: Mannequin(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Hips + parentName: Skeleton + position: {x: -0, y: 0.9810986, z: -0.01590455} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_UpperLeg + parentName: Hips + position: {x: -0.08610317, y: -0.053458035, z: -0.011470641} + rotation: {x: 0.999839, y: -0.01775374, z: 0.000046300094, w: -0.0026074864} + scale: {x: 1, y: 1, z: 1} + - name: Left_LowerLeg + parentName: Left_UpperLeg + position: {x: -2.9864513e-16, y: 0.4133444, z: -5.4956034e-17} + rotation: {x: 0.034046065, y: 2.2687323e-19, z: 7.728622e-21, w: 0.9994203} + scale: {x: 1, y: 1, z: 1} + - name: Left_Foot + parentName: Left_LowerLeg + position: {x: 0.0000000017320426, y: 0.41403946, z: 7.141509e-16} + rotation: {x: -0.035700925, y: 0.049957544, z: -0.019575229, w: 0.9979211} + scale: {x: 1, y: 1, z: 1} + - name: Left_Toes + parentName: Left_Foot + position: {x: 7.105427e-17, y: 0.07224803, z: -0.118065506} + rotation: {x: -0.7071068, y: 8.7157646e-33, z: -8.7157646e-33, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Left_ToesEnd + parentName: Left_Toes + position: {x: -0.0010026174, y: 0.06423476, z: 0.016843978} + rotation: {x: 0.7070656, y: -0.0076321815, z: -0.0076321815, w: 0.7070656} + scale: {x: 1, y: 1, z: 1} + - name: Right_UpperLeg + parentName: Hips + position: {x: 0.086103186, y: -0.053458147, z: -0.0114706475} + rotation: {x: 0.0026075041, y: 0.000046300407, z: 0.01775374, w: 0.999839} + scale: {x: 1, y: 1, z: 1} + - name: Right_LowerLeg + parentName: Right_UpperLeg + position: {x: 0.0000004514609, y: -0.41334414, z: 0.000000025994435} + rotation: {x: 0.034046065, y: 2.2687323e-19, z: 7.728622e-21, w: 0.9994203} + scale: {x: 1, y: 1, z: 1} + - name: Right_Foot + parentName: Right_LowerLeg + position: {x: -0.0000007472542, y: -0.41403967, z: -0.000000032847502} + rotation: {x: -0.035700925, y: 0.049957544, z: -0.019575229, w: 0.9979211} + scale: {x: 1, y: 1, z: 1} + - name: Right_Toes + parentName: Right_Foot + position: {x: -0.00000015643121, y: -0.07224799, z: 0.11807} + rotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Right_ToesEnd + parentName: Right_Toes + position: {x: 0.0010031584, y: -0.06423059, z: -0.016843898} + rotation: {x: 0.7070656, y: -0.0076321815, z: -0.0076321815, w: 0.7070656} + scale: {x: 1, y: 1, z: 1} + - name: Spine + parentName: Hips + position: {x: -0, y: 0.058229383, z: 0.0012229546} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Chest + parentName: Spine + position: {x: -0, y: 0.1034043, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: UpperChest + parentName: Chest + position: {x: -0, y: 0.1034043, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_Shoulder + parentName: UpperChest + position: {x: -0.0009571358, y: 0.19149224, z: -0.0087277945} + rotation: {x: -0.0049494267, y: -0.113521874, z: 0.043275386, w: 0.99258024} + scale: {x: 1, y: 1, z: 1} + - name: Left_UpperArm + parentName: Left_Shoulder + position: {x: -0.16743502, y: -5.684341e-16, z: -2.664535e-17} + rotation: {x: 0.12673509, y: 0.03332071, z: 0.6809724, w: 0.72048914} + scale: {x: 1, y: 1, z: 1} + - name: Left_LowerArm + parentName: Left_UpperArm + position: {x: -2.8421706e-16, y: 0.28508067, z: 0} + rotation: {x: 0.020536564, y: 0.00832135, z: -0.020624585, w: 0.9995417} + scale: {x: 1, y: 1, z: 1} + - name: Left_Hand + parentName: Left_LowerArm + position: {x: -2.4123817e-10, y: 0.24036221, z: -1.4210853e-16} + rotation: {x: -0.047397237, y: -0.24003562, z: 0.013464749, w: 0.9695128} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexProximal + parentName: Left_Hand + position: {x: 0.007815497, y: 0.0918443, z: 0.02657316} + rotation: {x: -0.0000789147, y: -0.7104809, z: -0.006305193, w: 0.70368826} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexIntermediate + parentName: Left_IndexProximal + position: {x: 9.079803e-16, y: 0.04209777, z: 3.2607592e-16} + rotation: {x: 0.030199163, y: 0.00000005960465, z: -0.00000038841978, w: 0.9995439} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexDistal + parentName: Left_IndexIntermediate + position: {x: -8.20111e-16, y: 0.02513925, z: -4.317065e-16} + rotation: {x: 0.03945603, y: 0.000000016383924, z: 0.0000000332638, w: 0.9992213} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexDistalEnd + parentName: Left_IndexDistal + position: {x: -1.1581012e-16, y: 0.024609203, z: -6.661337e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleProximal + parentName: Left_Hand + position: {x: 0.012847862, y: 0.08609763, z: 0.003435423} + rotation: {x: -0.004090429, y: -0.6610811, z: -0.004001968, w: 0.7502927} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleIntermediate + parentName: Left_MiddleProximal + position: {x: 2.7261607e-16, y: 0.051279362, z: 5.988264e-17} + rotation: {x: 0.026233751, y: -0.000000029802322, z: -0.0000007133931, w: 0.99965584} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleDistal + parentName: Left_MiddleIntermediate + position: {x: -7.199101e-17, y: 0.028284006, z: -4.93648e-17} + rotation: {x: 0.03347514, y: -0, z: -0, w: 0.9994396} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleDistalEnd + parentName: Left_MiddleDistal + position: {x: -1.7763565e-16, y: 0.023346113, z: -7.105426e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyProximal + parentName: Left_Hand + position: {x: 0.004436847, y: 0.07288173, z: -0.029359013} + rotation: {x: -0.02007038, y: -0.5504896, z: -0.008246153, w: 0.83456} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyIntermediate + parentName: Left_PinkyProximal + position: {x: 1.9539922e-16, y: 0.032272622, z: -1.4210853e-16} + rotation: {x: 0.028115956, y: -0.00000008940699, z: -0.0000005941839, w: 0.9996047} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyDistal + parentName: Left_PinkyIntermediate + position: {x: -3.5527133e-17, y: 0.020224448, z: -7.1054265e-17} + rotation: {x: 0.03643686, y: 0.00000014611446, z: 0.00000018696, w: 0.999336} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyDistalEnd + parentName: Left_PinkyDistal + position: {x: -1.2434495e-16, y: 0.018519057, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingProximal + parentName: Left_Hand + position: {x: 0.009525569, y: 0.08161553, z: -0.012242405} + rotation: {x: -0.017654313, y: -0.6026994, z: -0.0040520057, w: 0.79776275} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingIntermediate + parentName: Left_RingProximal + position: {x: 3.3750777e-16, y: 0.043630484, z: -1.4210853e-16} + rotation: {x: 0.023556013, y: 0.00000026822087, z: 0.0000007636844, w: 0.99972254} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingDistal + parentName: Left_RingIntermediate + position: {x: 1.7763566e-17, y: 0.027115494, z: -1.065814e-16} + rotation: {x: 0.03908592, y: -0.000000019744585, z: 0.00000042049942, w: 0.9992359} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingDistalEnd + parentName: Left_RingDistal + position: {x: -7.105426e-17, y: 0.02095726, z: -7.105426e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbProximal + parentName: Left_Hand + position: {x: -0.00080496486, y: 0.028816883, z: 0.023514476} + rotation: {x: 0.1796032, y: 0.8841741, z: 0.4239896, w: -0.07881452} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbIntermediate + parentName: Left_ThumbProximal + position: {x: 2.4357445e-15, y: 0.027578257, z: 0.0038183592} + rotation: {x: 0.1278054, y: -0, z: -0, w: 0.9917993} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbDistal + parentName: Left_ThumbIntermediate + position: {x: -2.2737365e-15, y: 0.044597257, z: -0.006869915} + rotation: {x: -0.045421924, y: -0.00000036741366, z: -0.0000008691409, w: 0.9989679} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbDistalEnd + parentName: Left_ThumbDistal + position: {x: -4.2632555e-16, y: 0.029458016, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Neck + parentName: UpperChest + position: {x: -0, y: 0.25104657, z: -0.015329581} + rotation: {x: 0.060688436, y: -0, z: -0, w: 0.9981568} + scale: {x: 1, y: 1, z: 1} + - name: Head + parentName: Neck + position: {x: -0, y: 0.12747401, z: 0} + rotation: {x: -0.060688436, y: 0, z: -0, w: 0.9981568} + scale: {x: 1, y: 1, z: 1} + - name: Jaw + parentName: Head + position: {x: -0, y: -0.00763539, z: 0.012895278} + rotation: {x: 0.15949209, y: 0.68888485, z: 0.15949209, w: 0.68888485} + scale: {x: 1, y: 1, z: 1} + - name: Left_Eye + parentName: Head + position: {x: -0.03330326, y: 0.034598116, z: 0.0867403} + rotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Right_Eye + parentName: Head + position: {x: 0.033303294, y: 0.03459628, z: 0.0867403} + rotation: {x: 0.7071068, y: 4.3297806e-17, z: 0.7071068, w: -4.3297806e-17} + scale: {x: 1, y: 1, z: 1} + - name: Neck_Twist_A + parentName: Neck + position: {x: -0, y: 0.063737005, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_Shoulder + parentName: UpperChest + position: {x: 0.0009571358, y: 0.19149381, z: -0.008727803} + rotation: {x: 0.99258024, y: -0.04327539, z: -0.113521874, w: 0.004949396} + scale: {x: 1, y: 1, z: 1} + - name: Right_UpperArm + parentName: Right_Shoulder + position: {x: 0.16743432, y: -0.0000022099182, z: 0.00000012213746} + rotation: {x: 0.1267345, y: 0.033320885, z: 0.68096745, w: 0.720494} + scale: {x: 1, y: 1, z: 1} + - name: Right_LowerArm + parentName: Right_UpperArm + position: {x: 0.0000037273983, y: -0.285085, z: -0.00000035927226} + rotation: {x: 0.020541133, y: 0.008317431, z: -0.020620903, w: 0.99954176} + scale: {x: 1, y: 1, z: 1} + - name: Right_Hand + parentName: Right_LowerArm + position: {x: 0.0000014923929, y: -0.24036367, z: 0.0000017856368} + rotation: {x: -0.047397237, y: -0.24003562, z: 0.013464749, w: 0.9695128} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexProximal + parentName: Right_Hand + position: {x: -0.0078223245, y: -0.0918393, z: -0.026574574} + rotation: {x: -0.00008773989, y: -0.7104814, z: -0.0063276542, w: 0.7036876} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexIntermediate + parentName: Right_IndexProximal + position: {x: 0.0000006924457, y: -0.04210151, z: -0.0000013631077} + rotation: {x: 0.03020306, y: -0.0000005662439, z: 0.000012195228, w: 0.99954385} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexDistal + parentName: Right_IndexIntermediate + position: {x: -0.00000032847043, y: -0.025139209, z: -0.0000005960629} + rotation: {x: 0.03948371, y: -0.000000052504312, z: -0.000005515076, w: 0.99922025} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexDistalEnd + parentName: Right_IndexDistal + position: {x: 0.00000023984484, y: -0.024609355, z: 0.0000006271131} + rotation: {x: -5.5511138e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleProximal + parentName: Right_Hand + position: {x: -0.012848663, y: -0.08609768, z: -0.0034359337} + rotation: {x: -0.0040856875, y: -0.6610817, z: -0.0040004994, w: 0.7502922} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleIntermediate + parentName: Right_MiddleProximal + position: {x: 0.000000014272595, y: -0.051275954, z: 0.0000009747695} + rotation: {x: 0.026226329, y: -0.0000007450579, z: -0.0000027469353, w: 0.9996561} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleDistal + parentName: Right_MiddleIntermediate + position: {x: 0.00000014287376, y: -0.028283618, z: 0.00000019378916} + rotation: {x: 0.03347514, y: -0, z: -0, w: 0.9994396} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleDistalEnd + parentName: Right_MiddleDistal + position: {x: 0.000000038619483, y: -0.023345316, z: 0.0000005352584} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyProximal + parentName: Right_Hand + position: {x: -0.0044381507, y: -0.07288141, z: 0.029358566} + rotation: {x: -0.020058475, y: -0.55049545, z: -0.008249418, w: 0.83455646} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyIntermediate + parentName: Right_PinkyProximal + position: {x: 0.00000045734515, y: -0.032268908, z: 0.00000088312623} + rotation: {x: 0.02811499, y: -0.0000035166731, z: -0.00000016298141, w: 0.9996047} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyDistal + parentName: Right_PinkyIntermediate + position: {x: 0.00000023899057, y: -0.02022493, z: 0.00000055474345} + rotation: {x: 0.03642403, y: -0.0000024211556, z: -0.000008829222, w: 0.9993365} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyDistalEnd + parentName: Right_PinkyDistal + position: {x: 0.000000632002, y: -0.018518865, z: 0.0000001154108} + rotation: {x: -1.7347236e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingProximal + parentName: Right_Hand + position: {x: -0.00952738, y: -0.08161427, z: 0.012242128} + rotation: {x: -0.017649079, y: -0.6027014, z: -0.0040535578, w: 0.7977614} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingIntermediate + parentName: Right_RingProximal + position: {x: 0.0000000695935, y: -0.04362872, z: 0.00000080048335} + rotation: {x: 0.023547903, y: 0.0000024139879, z: 0.0000069094813, w: 0.9997228} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingDistal + parentName: Right_RingIntermediate + position: {x: -0.000000290747, y: -0.02711462, z: 0.0000000181098} + rotation: {x: 0.039100695, y: 0.00000009656897, z: -0.000004755179, w: 0.99923533} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingDistalEnd + parentName: Right_RingDistal + position: {x: 0.00000008856214, y: -0.020957856, z: 0.0000005565459} + rotation: {x: 9.02056e-17, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbProximal + parentName: Right_Hand + position: {x: 0.00080341793, y: -0.028816395, z: -0.023514695} + rotation: {x: 0.17960793, y: 0.8841713, z: 0.42399347, w: -0.07881395} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbIntermediate + parentName: Right_ThumbProximal + position: {x: 0.00000015009721, y: -0.02757781, z: -0.0038183848} + rotation: {x: 0.12780538, y: -0, z: -0, w: 0.9917993} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbDistal + parentName: Right_ThumbIntermediate + position: {x: 0.0000007817755, y: -0.044594634, z: 0.0068707783} + rotation: {x: -0.04541878, y: -0.000003060937, z: 0.000004811603, w: 0.99896806} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbDistalEnd + parentName: Right_ThumbDistal + position: {x: 0.00000020228964, y: -0.029458148, z: 0.0000009551683} + rotation: {x: -2.7755574e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + armTwist: 1 + foreArmTwist: 0 + upperLegTwist: 1 + legTwist: 0 + armStretch: 0 + legStretch: 0 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 1 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: f21414af8aee5cb4dabce9f1b23cb9f6, type: 3} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 2 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/All Samples/Common/Animations/Armature@Crouching Idle.fbx b/Samples~/All Samples/Common/Animations/Armature@Crouching Idle.fbx new file mode 100644 index 0000000..2ee6ddd Binary files /dev/null and b/Samples~/All Samples/Common/Animations/Armature@Crouching Idle.fbx differ diff --git a/Samples~/All Samples/Common/Animations/Armature@Crouching Idle.fbx.meta b/Samples~/All Samples/Common/Animations/Armature@Crouching Idle.fbx.meta new file mode 100644 index 0000000..50eb421 --- /dev/null +++ b/Samples~/All Samples/Common/Animations/Armature@Crouching Idle.fbx.meta @@ -0,0 +1,925 @@ +fileFormatVersion: 2 +guid: 9821acc284329da40bebc8bd017ef161 +ModelImporter: + serializedVersion: 21300 + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Crouching Idle + - first: + 74: -203655887218126122 + second: Crouching Idle + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 1 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: Crouching Idle + takeName: mixamo.com + internalID: 0 + firstFrame: 0 + lastFrame: 75 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_UpperLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_LowerLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Foot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Toes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: UpperChest + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Shoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_UpperArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_LowerArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Hand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Shoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_UpperArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_LowerArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Hand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_UpperLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_LowerLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Foot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Toes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbProximal + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbIntermediate + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbDistal + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexProximal + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexIntermediate + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexDistal + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleProximal + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleIntermediate + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleDistal + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingProximal + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingIntermediate + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingDistal + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyProximal + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyIntermediate + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyDistal + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbProximal + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbIntermediate + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbDistal + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexProximal + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexIntermediate + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexDistal + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleProximal + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleIntermediate + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleDistal + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingProximal + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingIntermediate + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingDistal + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyProximal + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyIntermediate + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyDistal + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: Mannequin(Clone) + parentName: + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Geometry + parentName: Mannequin(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Mannequin_Mesh + parentName: Geometry + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Skeleton + parentName: Mannequin(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Hips + parentName: Skeleton + position: {x: -0, y: 0.9810986, z: -0.01590455} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_UpperLeg + parentName: Hips + position: {x: -0.08610317, y: -0.053458035, z: -0.011470641} + rotation: {x: 0.999839, y: -0.01775374, z: 0.000046300094, w: -0.0026074864} + scale: {x: 1, y: 1, z: 1} + - name: Left_LowerLeg + parentName: Left_UpperLeg + position: {x: -2.9864513e-16, y: 0.4133444, z: -5.4956034e-17} + rotation: {x: 0.034046065, y: 2.2687323e-19, z: 7.728622e-21, w: 0.9994203} + scale: {x: 1, y: 1, z: 1} + - name: Left_Foot + parentName: Left_LowerLeg + position: {x: 0.0000000017320426, y: 0.41403946, z: 7.141509e-16} + rotation: {x: -0.035700925, y: 0.049957544, z: -0.019575229, w: 0.9979211} + scale: {x: 1, y: 1, z: 1} + - name: Left_Toes + parentName: Left_Foot + position: {x: 7.105427e-17, y: 0.07224803, z: -0.118065506} + rotation: {x: -0.7071068, y: 8.7157646e-33, z: -8.7157646e-33, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Left_ToesEnd + parentName: Left_Toes + position: {x: -0.0010026174, y: 0.06423476, z: 0.016843978} + rotation: {x: 0.7070656, y: -0.0076321815, z: -0.0076321815, w: 0.7070656} + scale: {x: 1, y: 1, z: 1} + - name: Right_UpperLeg + parentName: Hips + position: {x: 0.086103186, y: -0.053458147, z: -0.0114706475} + rotation: {x: 0.0026075041, y: 0.000046300407, z: 0.01775374, w: 0.999839} + scale: {x: 1, y: 1, z: 1} + - name: Right_LowerLeg + parentName: Right_UpperLeg + position: {x: 0.0000004514609, y: -0.41334414, z: 0.000000025994435} + rotation: {x: 0.034046065, y: 2.2687323e-19, z: 7.728622e-21, w: 0.9994203} + scale: {x: 1, y: 1, z: 1} + - name: Right_Foot + parentName: Right_LowerLeg + position: {x: -0.0000007472542, y: -0.41403967, z: -0.000000032847502} + rotation: {x: -0.035700925, y: 0.049957544, z: -0.019575229, w: 0.9979211} + scale: {x: 1, y: 1, z: 1} + - name: Right_Toes + parentName: Right_Foot + position: {x: -0.00000015643121, y: -0.07224799, z: 0.11807} + rotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Right_ToesEnd + parentName: Right_Toes + position: {x: 0.0010031584, y: -0.06423059, z: -0.016843898} + rotation: {x: 0.7070656, y: -0.0076321815, z: -0.0076321815, w: 0.7070656} + scale: {x: 1, y: 1, z: 1} + - name: Spine + parentName: Hips + position: {x: -0, y: 0.058229383, z: 0.0012229546} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Chest + parentName: Spine + position: {x: -0, y: 0.1034043, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: UpperChest + parentName: Chest + position: {x: -0, y: 0.1034043, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_Shoulder + parentName: UpperChest + position: {x: -0.0009571358, y: 0.19149224, z: -0.0087277945} + rotation: {x: -0.0049494267, y: -0.113521874, z: 0.043275386, w: 0.99258024} + scale: {x: 1, y: 1, z: 1} + - name: Left_UpperArm + parentName: Left_Shoulder + position: {x: -0.16743502, y: -5.684341e-16, z: -2.664535e-17} + rotation: {x: 0.12673509, y: 0.03332071, z: 0.6809724, w: 0.72048914} + scale: {x: 1, y: 1, z: 1} + - name: Left_LowerArm + parentName: Left_UpperArm + position: {x: -2.8421706e-16, y: 0.28508067, z: 0} + rotation: {x: 0.020536564, y: 0.00832135, z: -0.020624585, w: 0.9995417} + scale: {x: 1, y: 1, z: 1} + - name: Left_Hand + parentName: Left_LowerArm + position: {x: -2.4123817e-10, y: 0.24036221, z: -1.4210853e-16} + rotation: {x: -0.047397237, y: -0.24003562, z: 0.013464749, w: 0.9695128} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexProximal + parentName: Left_Hand + position: {x: 0.007815497, y: 0.0918443, z: 0.02657316} + rotation: {x: -0.0000789147, y: -0.7104809, z: -0.006305193, w: 0.70368826} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexIntermediate + parentName: Left_IndexProximal + position: {x: 9.079803e-16, y: 0.04209777, z: 3.2607592e-16} + rotation: {x: 0.030199163, y: 0.00000005960465, z: -0.00000038841978, w: 0.9995439} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexDistal + parentName: Left_IndexIntermediate + position: {x: -8.20111e-16, y: 0.02513925, z: -4.317065e-16} + rotation: {x: 0.03945603, y: 0.000000016383924, z: 0.0000000332638, w: 0.9992213} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexDistalEnd + parentName: Left_IndexDistal + position: {x: -1.1581012e-16, y: 0.024609203, z: -6.661337e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleProximal + parentName: Left_Hand + position: {x: 0.012847862, y: 0.08609763, z: 0.003435423} + rotation: {x: -0.004090429, y: -0.6610811, z: -0.004001968, w: 0.7502927} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleIntermediate + parentName: Left_MiddleProximal + position: {x: 2.7261607e-16, y: 0.051279362, z: 5.988264e-17} + rotation: {x: 0.026233751, y: -0.000000029802322, z: -0.0000007133931, w: 0.99965584} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleDistal + parentName: Left_MiddleIntermediate + position: {x: -7.199101e-17, y: 0.028284006, z: -4.93648e-17} + rotation: {x: 0.03347514, y: -0, z: -0, w: 0.9994396} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleDistalEnd + parentName: Left_MiddleDistal + position: {x: -1.7763565e-16, y: 0.023346113, z: -7.105426e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyProximal + parentName: Left_Hand + position: {x: 0.004436847, y: 0.07288173, z: -0.029359013} + rotation: {x: -0.02007038, y: -0.5504896, z: -0.008246153, w: 0.83456} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyIntermediate + parentName: Left_PinkyProximal + position: {x: 1.9539922e-16, y: 0.032272622, z: -1.4210853e-16} + rotation: {x: 0.028115956, y: -0.00000008940699, z: -0.0000005941839, w: 0.9996047} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyDistal + parentName: Left_PinkyIntermediate + position: {x: -3.5527133e-17, y: 0.020224448, z: -7.1054265e-17} + rotation: {x: 0.03643686, y: 0.00000014611446, z: 0.00000018696, w: 0.999336} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyDistalEnd + parentName: Left_PinkyDistal + position: {x: -1.2434495e-16, y: 0.018519057, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingProximal + parentName: Left_Hand + position: {x: 0.009525569, y: 0.08161553, z: -0.012242405} + rotation: {x: -0.017654313, y: -0.6026994, z: -0.0040520057, w: 0.79776275} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingIntermediate + parentName: Left_RingProximal + position: {x: 3.3750777e-16, y: 0.043630484, z: -1.4210853e-16} + rotation: {x: 0.023556013, y: 0.00000026822087, z: 0.0000007636844, w: 0.99972254} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingDistal + parentName: Left_RingIntermediate + position: {x: 1.7763566e-17, y: 0.027115494, z: -1.065814e-16} + rotation: {x: 0.03908592, y: -0.000000019744585, z: 0.00000042049942, w: 0.9992359} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingDistalEnd + parentName: Left_RingDistal + position: {x: -7.105426e-17, y: 0.02095726, z: -7.105426e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbProximal + parentName: Left_Hand + position: {x: -0.00080496486, y: 0.028816883, z: 0.023514476} + rotation: {x: 0.1796032, y: 0.8841741, z: 0.4239896, w: -0.07881452} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbIntermediate + parentName: Left_ThumbProximal + position: {x: 2.4357445e-15, y: 0.027578257, z: 0.0038183592} + rotation: {x: 0.1278054, y: -0, z: -0, w: 0.9917993} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbDistal + parentName: Left_ThumbIntermediate + position: {x: -2.2737365e-15, y: 0.044597257, z: -0.006869915} + rotation: {x: -0.045421924, y: -0.00000036741366, z: -0.0000008691409, w: 0.9989679} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbDistalEnd + parentName: Left_ThumbDistal + position: {x: -4.2632555e-16, y: 0.029458016, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Neck + parentName: UpperChest + position: {x: -0, y: 0.25104657, z: -0.015329581} + rotation: {x: 0.060688436, y: -0, z: -0, w: 0.9981568} + scale: {x: 1, y: 1, z: 1} + - name: Head + parentName: Neck + position: {x: -0, y: 0.12747401, z: 0} + rotation: {x: -0.060688436, y: 0, z: -0, w: 0.9981568} + scale: {x: 1, y: 1, z: 1} + - name: Jaw + parentName: Head + position: {x: -0, y: -0.00763539, z: 0.012895278} + rotation: {x: 0.15949209, y: 0.68888485, z: 0.15949209, w: 0.68888485} + scale: {x: 1, y: 1, z: 1} + - name: Left_Eye + parentName: Head + position: {x: -0.03330326, y: 0.034598116, z: 0.0867403} + rotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Right_Eye + parentName: Head + position: {x: 0.033303294, y: 0.03459628, z: 0.0867403} + rotation: {x: 0.7071068, y: 4.3297806e-17, z: 0.7071068, w: -4.3297806e-17} + scale: {x: 1, y: 1, z: 1} + - name: Neck_Twist_A + parentName: Neck + position: {x: -0, y: 0.063737005, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_Shoulder + parentName: UpperChest + position: {x: 0.0009571358, y: 0.19149381, z: -0.008727803} + rotation: {x: 0.99258024, y: -0.04327539, z: -0.113521874, w: 0.004949396} + scale: {x: 1, y: 1, z: 1} + - name: Right_UpperArm + parentName: Right_Shoulder + position: {x: 0.16743432, y: -0.0000022099182, z: 0.00000012213746} + rotation: {x: 0.1267345, y: 0.033320885, z: 0.68096745, w: 0.720494} + scale: {x: 1, y: 1, z: 1} + - name: Right_LowerArm + parentName: Right_UpperArm + position: {x: 0.0000037273983, y: -0.285085, z: -0.00000035927226} + rotation: {x: 0.020541133, y: 0.008317431, z: -0.020620903, w: 0.99954176} + scale: {x: 1, y: 1, z: 1} + - name: Right_Hand + parentName: Right_LowerArm + position: {x: 0.0000014923929, y: -0.24036367, z: 0.0000017856368} + rotation: {x: -0.047397237, y: -0.24003562, z: 0.013464749, w: 0.9695128} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexProximal + parentName: Right_Hand + position: {x: -0.0078223245, y: -0.0918393, z: -0.026574574} + rotation: {x: -0.00008773989, y: -0.7104814, z: -0.0063276542, w: 0.7036876} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexIntermediate + parentName: Right_IndexProximal + position: {x: 0.0000006924457, y: -0.04210151, z: -0.0000013631077} + rotation: {x: 0.03020306, y: -0.0000005662439, z: 0.000012195228, w: 0.99954385} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexDistal + parentName: Right_IndexIntermediate + position: {x: -0.00000032847043, y: -0.025139209, z: -0.0000005960629} + rotation: {x: 0.03948371, y: -0.000000052504312, z: -0.000005515076, w: 0.99922025} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexDistalEnd + parentName: Right_IndexDistal + position: {x: 0.00000023984484, y: -0.024609355, z: 0.0000006271131} + rotation: {x: -5.5511138e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleProximal + parentName: Right_Hand + position: {x: -0.012848663, y: -0.08609768, z: -0.0034359337} + rotation: {x: -0.0040856875, y: -0.6610817, z: -0.0040004994, w: 0.7502922} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleIntermediate + parentName: Right_MiddleProximal + position: {x: 0.000000014272595, y: -0.051275954, z: 0.0000009747695} + rotation: {x: 0.026226329, y: -0.0000007450579, z: -0.0000027469353, w: 0.9996561} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleDistal + parentName: Right_MiddleIntermediate + position: {x: 0.00000014287376, y: -0.028283618, z: 0.00000019378916} + rotation: {x: 0.03347514, y: -0, z: -0, w: 0.9994396} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleDistalEnd + parentName: Right_MiddleDistal + position: {x: 0.000000038619483, y: -0.023345316, z: 0.0000005352584} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyProximal + parentName: Right_Hand + position: {x: -0.0044381507, y: -0.07288141, z: 0.029358566} + rotation: {x: -0.020058475, y: -0.55049545, z: -0.008249418, w: 0.83455646} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyIntermediate + parentName: Right_PinkyProximal + position: {x: 0.00000045734515, y: -0.032268908, z: 0.00000088312623} + rotation: {x: 0.02811499, y: -0.0000035166731, z: -0.00000016298141, w: 0.9996047} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyDistal + parentName: Right_PinkyIntermediate + position: {x: 0.00000023899057, y: -0.02022493, z: 0.00000055474345} + rotation: {x: 0.03642403, y: -0.0000024211556, z: -0.000008829222, w: 0.9993365} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyDistalEnd + parentName: Right_PinkyDistal + position: {x: 0.000000632002, y: -0.018518865, z: 0.0000001154108} + rotation: {x: -1.7347236e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingProximal + parentName: Right_Hand + position: {x: -0.00952738, y: -0.08161427, z: 0.012242128} + rotation: {x: -0.017649079, y: -0.6027014, z: -0.0040535578, w: 0.7977614} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingIntermediate + parentName: Right_RingProximal + position: {x: 0.0000000695935, y: -0.04362872, z: 0.00000080048335} + rotation: {x: 0.023547903, y: 0.0000024139879, z: 0.0000069094813, w: 0.9997228} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingDistal + parentName: Right_RingIntermediate + position: {x: -0.000000290747, y: -0.02711462, z: 0.0000000181098} + rotation: {x: 0.039100695, y: 0.00000009656897, z: -0.000004755179, w: 0.99923533} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingDistalEnd + parentName: Right_RingDistal + position: {x: 0.00000008856214, y: -0.020957856, z: 0.0000005565459} + rotation: {x: 9.02056e-17, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbProximal + parentName: Right_Hand + position: {x: 0.00080341793, y: -0.028816395, z: -0.023514695} + rotation: {x: 0.17960793, y: 0.8841713, z: 0.42399347, w: -0.07881395} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbIntermediate + parentName: Right_ThumbProximal + position: {x: 0.00000015009721, y: -0.02757781, z: -0.0038183848} + rotation: {x: 0.12780538, y: -0, z: -0, w: 0.9917993} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbDistal + parentName: Right_ThumbIntermediate + position: {x: 0.0000007817755, y: -0.044594634, z: 0.0068707783} + rotation: {x: -0.04541878, y: -0.000003060937, z: 0.000004811603, w: 0.99896806} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbDistalEnd + parentName: Right_ThumbDistal + position: {x: 0.00000020228964, y: -0.029458148, z: 0.0000009551683} + rotation: {x: -2.7755574e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + armTwist: 1 + foreArmTwist: 0 + upperLegTwist: 1 + legTwist: 0 + armStretch: 0 + legStretch: 0 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 1 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: f21414af8aee5cb4dabce9f1b23cb9f6, type: 3} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 2 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/All Samples/Common/Animations/Armature@Rifle Aiming Idle.fbx b/Samples~/All Samples/Common/Animations/Armature@Rifle Aiming Idle.fbx new file mode 100644 index 0000000..4252531 Binary files /dev/null and b/Samples~/All Samples/Common/Animations/Armature@Rifle Aiming Idle.fbx differ diff --git a/Samples~/All Samples/Common/Animations/Armature@Rifle Aiming Idle.fbx.meta b/Samples~/All Samples/Common/Animations/Armature@Rifle Aiming Idle.fbx.meta new file mode 100644 index 0000000..df0e062 --- /dev/null +++ b/Samples~/All Samples/Common/Animations/Armature@Rifle Aiming Idle.fbx.meta @@ -0,0 +1,925 @@ +fileFormatVersion: 2 +guid: 0ac2b19692b2299418cc2152a1def1a3 +ModelImporter: + serializedVersion: 21300 + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Rifle Aiming - Idle + - first: + 74: -203655887218126122 + second: Rifle Aiming - Idle + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 1 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: Rifle Aiming - Idle + takeName: mixamo.com + internalID: 0 + firstFrame: 0 + lastFrame: 93 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_UpperLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_LowerLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Foot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Toes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: UpperChest + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Shoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_UpperArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_LowerArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Hand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Shoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_UpperArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_LowerArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Hand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_UpperLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_LowerLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Foot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Toes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbProximal + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbIntermediate + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbDistal + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexProximal + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexIntermediate + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexDistal + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleProximal + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleIntermediate + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleDistal + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingProximal + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingIntermediate + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingDistal + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyProximal + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyIntermediate + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyDistal + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbProximal + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbIntermediate + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbDistal + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexProximal + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexIntermediate + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexDistal + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleProximal + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleIntermediate + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleDistal + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingProximal + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingIntermediate + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingDistal + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyProximal + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyIntermediate + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyDistal + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: Mannequin(Clone) + parentName: + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Geometry + parentName: Mannequin(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Mannequin_Mesh + parentName: Geometry + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Skeleton + parentName: Mannequin(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Hips + parentName: Skeleton + position: {x: -0, y: 0.9810986, z: -0.01590455} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_UpperLeg + parentName: Hips + position: {x: -0.08610317, y: -0.053458035, z: -0.011470641} + rotation: {x: 0.999839, y: -0.01775374, z: 0.000046300094, w: -0.0026074864} + scale: {x: 1, y: 1, z: 1} + - name: Left_LowerLeg + parentName: Left_UpperLeg + position: {x: -2.9864513e-16, y: 0.4133444, z: -5.4956034e-17} + rotation: {x: 0.034046065, y: 2.2687323e-19, z: 7.728622e-21, w: 0.9994203} + scale: {x: 1, y: 1, z: 1} + - name: Left_Foot + parentName: Left_LowerLeg + position: {x: 0.0000000017320426, y: 0.41403946, z: 7.141509e-16} + rotation: {x: -0.035700925, y: 0.049957544, z: -0.019575229, w: 0.9979211} + scale: {x: 1, y: 1, z: 1} + - name: Left_Toes + parentName: Left_Foot + position: {x: 7.105427e-17, y: 0.07224803, z: -0.118065506} + rotation: {x: -0.7071068, y: 8.7157646e-33, z: -8.7157646e-33, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Left_ToesEnd + parentName: Left_Toes + position: {x: -0.0010026174, y: 0.06423476, z: 0.016843978} + rotation: {x: 0.7070656, y: -0.0076321815, z: -0.0076321815, w: 0.7070656} + scale: {x: 1, y: 1, z: 1} + - name: Right_UpperLeg + parentName: Hips + position: {x: 0.086103186, y: -0.053458147, z: -0.0114706475} + rotation: {x: 0.0026075041, y: 0.000046300407, z: 0.01775374, w: 0.999839} + scale: {x: 1, y: 1, z: 1} + - name: Right_LowerLeg + parentName: Right_UpperLeg + position: {x: 0.0000004514609, y: -0.41334414, z: 0.000000025994435} + rotation: {x: 0.034046065, y: 2.2687323e-19, z: 7.728622e-21, w: 0.9994203} + scale: {x: 1, y: 1, z: 1} + - name: Right_Foot + parentName: Right_LowerLeg + position: {x: -0.0000007472542, y: -0.41403967, z: -0.000000032847502} + rotation: {x: -0.035700925, y: 0.049957544, z: -0.019575229, w: 0.9979211} + scale: {x: 1, y: 1, z: 1} + - name: Right_Toes + parentName: Right_Foot + position: {x: -0.00000015643121, y: -0.07224799, z: 0.11807} + rotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Right_ToesEnd + parentName: Right_Toes + position: {x: 0.0010031584, y: -0.06423059, z: -0.016843898} + rotation: {x: 0.7070656, y: -0.0076321815, z: -0.0076321815, w: 0.7070656} + scale: {x: 1, y: 1, z: 1} + - name: Spine + parentName: Hips + position: {x: -0, y: 0.058229383, z: 0.0012229546} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Chest + parentName: Spine + position: {x: -0, y: 0.1034043, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: UpperChest + parentName: Chest + position: {x: -0, y: 0.1034043, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_Shoulder + parentName: UpperChest + position: {x: -0.0009571358, y: 0.19149224, z: -0.0087277945} + rotation: {x: -0.0049494267, y: -0.113521874, z: 0.043275386, w: 0.99258024} + scale: {x: 1, y: 1, z: 1} + - name: Left_UpperArm + parentName: Left_Shoulder + position: {x: -0.16743502, y: -5.684341e-16, z: -2.664535e-17} + rotation: {x: 0.12673509, y: 0.03332071, z: 0.6809724, w: 0.72048914} + scale: {x: 1, y: 1, z: 1} + - name: Left_LowerArm + parentName: Left_UpperArm + position: {x: -2.8421706e-16, y: 0.28508067, z: 0} + rotation: {x: 0.020536564, y: 0.00832135, z: -0.020624585, w: 0.9995417} + scale: {x: 1, y: 1, z: 1} + - name: Left_Hand + parentName: Left_LowerArm + position: {x: -2.4123817e-10, y: 0.24036221, z: -1.4210853e-16} + rotation: {x: -0.047397237, y: -0.24003562, z: 0.013464749, w: 0.9695128} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexProximal + parentName: Left_Hand + position: {x: 0.007815497, y: 0.0918443, z: 0.02657316} + rotation: {x: -0.0000789147, y: -0.7104809, z: -0.006305193, w: 0.70368826} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexIntermediate + parentName: Left_IndexProximal + position: {x: 9.079803e-16, y: 0.04209777, z: 3.2607592e-16} + rotation: {x: 0.030199163, y: 0.00000005960465, z: -0.00000038841978, w: 0.9995439} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexDistal + parentName: Left_IndexIntermediate + position: {x: -8.20111e-16, y: 0.02513925, z: -4.317065e-16} + rotation: {x: 0.03945603, y: 0.000000016383924, z: 0.0000000332638, w: 0.9992213} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexDistalEnd + parentName: Left_IndexDistal + position: {x: -1.1581012e-16, y: 0.024609203, z: -6.661337e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleProximal + parentName: Left_Hand + position: {x: 0.012847862, y: 0.08609763, z: 0.003435423} + rotation: {x: -0.004090429, y: -0.6610811, z: -0.004001968, w: 0.7502927} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleIntermediate + parentName: Left_MiddleProximal + position: {x: 2.7261607e-16, y: 0.051279362, z: 5.988264e-17} + rotation: {x: 0.026233751, y: -0.000000029802322, z: -0.0000007133931, w: 0.99965584} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleDistal + parentName: Left_MiddleIntermediate + position: {x: -7.199101e-17, y: 0.028284006, z: -4.93648e-17} + rotation: {x: 0.03347514, y: -0, z: -0, w: 0.9994396} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleDistalEnd + parentName: Left_MiddleDistal + position: {x: -1.7763565e-16, y: 0.023346113, z: -7.105426e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyProximal + parentName: Left_Hand + position: {x: 0.004436847, y: 0.07288173, z: -0.029359013} + rotation: {x: -0.02007038, y: -0.5504896, z: -0.008246153, w: 0.83456} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyIntermediate + parentName: Left_PinkyProximal + position: {x: 1.9539922e-16, y: 0.032272622, z: -1.4210853e-16} + rotation: {x: 0.028115956, y: -0.00000008940699, z: -0.0000005941839, w: 0.9996047} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyDistal + parentName: Left_PinkyIntermediate + position: {x: -3.5527133e-17, y: 0.020224448, z: -7.1054265e-17} + rotation: {x: 0.03643686, y: 0.00000014611446, z: 0.00000018696, w: 0.999336} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyDistalEnd + parentName: Left_PinkyDistal + position: {x: -1.2434495e-16, y: 0.018519057, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingProximal + parentName: Left_Hand + position: {x: 0.009525569, y: 0.08161553, z: -0.012242405} + rotation: {x: -0.017654313, y: -0.6026994, z: -0.0040520057, w: 0.79776275} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingIntermediate + parentName: Left_RingProximal + position: {x: 3.3750777e-16, y: 0.043630484, z: -1.4210853e-16} + rotation: {x: 0.023556013, y: 0.00000026822087, z: 0.0000007636844, w: 0.99972254} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingDistal + parentName: Left_RingIntermediate + position: {x: 1.7763566e-17, y: 0.027115494, z: -1.065814e-16} + rotation: {x: 0.03908592, y: -0.000000019744585, z: 0.00000042049942, w: 0.9992359} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingDistalEnd + parentName: Left_RingDistal + position: {x: -7.105426e-17, y: 0.02095726, z: -7.105426e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbProximal + parentName: Left_Hand + position: {x: -0.00080496486, y: 0.028816883, z: 0.023514476} + rotation: {x: 0.1796032, y: 0.8841741, z: 0.4239896, w: -0.07881452} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbIntermediate + parentName: Left_ThumbProximal + position: {x: 2.4357445e-15, y: 0.027578257, z: 0.0038183592} + rotation: {x: 0.1278054, y: -0, z: -0, w: 0.9917993} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbDistal + parentName: Left_ThumbIntermediate + position: {x: -2.2737365e-15, y: 0.044597257, z: -0.006869915} + rotation: {x: -0.045421924, y: -0.00000036741366, z: -0.0000008691409, w: 0.9989679} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbDistalEnd + parentName: Left_ThumbDistal + position: {x: -4.2632555e-16, y: 0.029458016, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Neck + parentName: UpperChest + position: {x: -0, y: 0.25104657, z: -0.015329581} + rotation: {x: 0.060688436, y: -0, z: -0, w: 0.9981568} + scale: {x: 1, y: 1, z: 1} + - name: Head + parentName: Neck + position: {x: -0, y: 0.12747401, z: 0} + rotation: {x: -0.060688436, y: 0, z: -0, w: 0.9981568} + scale: {x: 1, y: 1, z: 1} + - name: Jaw + parentName: Head + position: {x: -0, y: -0.00763539, z: 0.012895278} + rotation: {x: 0.15949209, y: 0.68888485, z: 0.15949209, w: 0.68888485} + scale: {x: 1, y: 1, z: 1} + - name: Left_Eye + parentName: Head + position: {x: -0.03330326, y: 0.034598116, z: 0.0867403} + rotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Right_Eye + parentName: Head + position: {x: 0.033303294, y: 0.03459628, z: 0.0867403} + rotation: {x: 0.7071068, y: 4.3297806e-17, z: 0.7071068, w: -4.3297806e-17} + scale: {x: 1, y: 1, z: 1} + - name: Neck_Twist_A + parentName: Neck + position: {x: -0, y: 0.063737005, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_Shoulder + parentName: UpperChest + position: {x: 0.0009571358, y: 0.19149381, z: -0.008727803} + rotation: {x: 0.99258024, y: -0.04327539, z: -0.113521874, w: 0.004949396} + scale: {x: 1, y: 1, z: 1} + - name: Right_UpperArm + parentName: Right_Shoulder + position: {x: 0.16743432, y: -0.0000022099182, z: 0.00000012213746} + rotation: {x: 0.1267345, y: 0.033320885, z: 0.68096745, w: 0.720494} + scale: {x: 1, y: 1, z: 1} + - name: Right_LowerArm + parentName: Right_UpperArm + position: {x: 0.0000037273983, y: -0.285085, z: -0.00000035927226} + rotation: {x: 0.020541133, y: 0.008317431, z: -0.020620903, w: 0.99954176} + scale: {x: 1, y: 1, z: 1} + - name: Right_Hand + parentName: Right_LowerArm + position: {x: 0.0000014923929, y: -0.24036367, z: 0.0000017856368} + rotation: {x: -0.047397237, y: -0.24003562, z: 0.013464749, w: 0.9695128} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexProximal + parentName: Right_Hand + position: {x: -0.0078223245, y: -0.0918393, z: -0.026574574} + rotation: {x: -0.00008773989, y: -0.7104814, z: -0.0063276542, w: 0.7036876} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexIntermediate + parentName: Right_IndexProximal + position: {x: 0.0000006924457, y: -0.04210151, z: -0.0000013631077} + rotation: {x: 0.03020306, y: -0.0000005662439, z: 0.000012195228, w: 0.99954385} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexDistal + parentName: Right_IndexIntermediate + position: {x: -0.00000032847043, y: -0.025139209, z: -0.0000005960629} + rotation: {x: 0.03948371, y: -0.000000052504312, z: -0.000005515076, w: 0.99922025} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexDistalEnd + parentName: Right_IndexDistal + position: {x: 0.00000023984484, y: -0.024609355, z: 0.0000006271131} + rotation: {x: -5.5511138e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleProximal + parentName: Right_Hand + position: {x: -0.012848663, y: -0.08609768, z: -0.0034359337} + rotation: {x: -0.0040856875, y: -0.6610817, z: -0.0040004994, w: 0.7502922} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleIntermediate + parentName: Right_MiddleProximal + position: {x: 0.000000014272595, y: -0.051275954, z: 0.0000009747695} + rotation: {x: 0.026226329, y: -0.0000007450579, z: -0.0000027469353, w: 0.9996561} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleDistal + parentName: Right_MiddleIntermediate + position: {x: 0.00000014287376, y: -0.028283618, z: 0.00000019378916} + rotation: {x: 0.03347514, y: -0, z: -0, w: 0.9994396} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleDistalEnd + parentName: Right_MiddleDistal + position: {x: 0.000000038619483, y: -0.023345316, z: 0.0000005352584} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyProximal + parentName: Right_Hand + position: {x: -0.0044381507, y: -0.07288141, z: 0.029358566} + rotation: {x: -0.020058475, y: -0.55049545, z: -0.008249418, w: 0.83455646} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyIntermediate + parentName: Right_PinkyProximal + position: {x: 0.00000045734515, y: -0.032268908, z: 0.00000088312623} + rotation: {x: 0.02811499, y: -0.0000035166731, z: -0.00000016298141, w: 0.9996047} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyDistal + parentName: Right_PinkyIntermediate + position: {x: 0.00000023899057, y: -0.02022493, z: 0.00000055474345} + rotation: {x: 0.03642403, y: -0.0000024211556, z: -0.000008829222, w: 0.9993365} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyDistalEnd + parentName: Right_PinkyDistal + position: {x: 0.000000632002, y: -0.018518865, z: 0.0000001154108} + rotation: {x: -1.7347236e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingProximal + parentName: Right_Hand + position: {x: -0.00952738, y: -0.08161427, z: 0.012242128} + rotation: {x: -0.017649079, y: -0.6027014, z: -0.0040535578, w: 0.7977614} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingIntermediate + parentName: Right_RingProximal + position: {x: 0.0000000695935, y: -0.04362872, z: 0.00000080048335} + rotation: {x: 0.023547903, y: 0.0000024139879, z: 0.0000069094813, w: 0.9997228} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingDistal + parentName: Right_RingIntermediate + position: {x: -0.000000290747, y: -0.02711462, z: 0.0000000181098} + rotation: {x: 0.039100695, y: 0.00000009656897, z: -0.000004755179, w: 0.99923533} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingDistalEnd + parentName: Right_RingDistal + position: {x: 0.00000008856214, y: -0.020957856, z: 0.0000005565459} + rotation: {x: 9.02056e-17, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbProximal + parentName: Right_Hand + position: {x: 0.00080341793, y: -0.028816395, z: -0.023514695} + rotation: {x: 0.17960793, y: 0.8841713, z: 0.42399347, w: -0.07881395} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbIntermediate + parentName: Right_ThumbProximal + position: {x: 0.00000015009721, y: -0.02757781, z: -0.0038183848} + rotation: {x: 0.12780538, y: -0, z: -0, w: 0.9917993} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbDistal + parentName: Right_ThumbIntermediate + position: {x: 0.0000007817755, y: -0.044594634, z: 0.0068707783} + rotation: {x: -0.04541878, y: -0.000003060937, z: 0.000004811603, w: 0.99896806} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbDistalEnd + parentName: Right_ThumbDistal + position: {x: 0.00000020228964, y: -0.029458148, z: 0.0000009551683} + rotation: {x: -2.7755574e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + armTwist: 1 + foreArmTwist: 0 + upperLegTwist: 1 + legTwist: 0 + armStretch: 0 + legStretch: 0 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 1 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: f21414af8aee5cb4dabce9f1b23cb9f6, type: 3} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 2 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/All Samples/Common/Animations/Armature@Strafe.fbx b/Samples~/All Samples/Common/Animations/Armature@Strafe.fbx new file mode 100644 index 0000000..9133e98 Binary files /dev/null and b/Samples~/All Samples/Common/Animations/Armature@Strafe.fbx differ diff --git a/Samples~/All Samples/Common/Animations/Armature@Strafe.fbx.meta b/Samples~/All Samples/Common/Animations/Armature@Strafe.fbx.meta new file mode 100644 index 0000000..2cd63fa --- /dev/null +++ b/Samples~/All Samples/Common/Animations/Armature@Strafe.fbx.meta @@ -0,0 +1,925 @@ +fileFormatVersion: 2 +guid: d3763d9091af0e54c97062d03c03338e +ModelImporter: + serializedVersion: 21300 + internalIDToNameTable: + - first: + 74: 1827226128182048838 + second: Strafe + - first: + 74: -203655887218126122 + second: Rifle Aiming - Strafing + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 1 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 3 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: Rifle Aiming - Strafing + takeName: mixamo.com + internalID: 0 + firstFrame: 0 + lastFrame: 35 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 0 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: + - boneName: Hips + humanName: Hips + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_UpperLeg + humanName: RightUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_LowerLeg + humanName: RightLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Foot + humanName: RightFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Toes + humanName: RightToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Spine + humanName: Spine + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Chest + humanName: Chest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: UpperChest + humanName: UpperChest + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Shoulder + humanName: RightShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_UpperArm + humanName: RightUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_LowerArm + humanName: RightLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_Hand + humanName: RightHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Neck + humanName: Neck + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Head + humanName: Head + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Jaw + humanName: Jaw + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Shoulder + humanName: LeftShoulder + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_UpperArm + humanName: LeftUpperArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_LowerArm + humanName: LeftLowerArm + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Hand + humanName: LeftHand + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_UpperLeg + humanName: LeftUpperLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_LowerLeg + humanName: LeftLowerLeg + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Foot + humanName: LeftFoot + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_Toes + humanName: LeftToes + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbProximal + humanName: Left Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbIntermediate + humanName: Left Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_ThumbDistal + humanName: Left Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexProximal + humanName: Left Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexIntermediate + humanName: Left Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_IndexDistal + humanName: Left Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleProximal + humanName: Left Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleIntermediate + humanName: Left Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_MiddleDistal + humanName: Left Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingProximal + humanName: Left Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingIntermediate + humanName: Left Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_RingDistal + humanName: Left Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyProximal + humanName: Left Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyIntermediate + humanName: Left Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Left_PinkyDistal + humanName: Left Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbProximal + humanName: Right Thumb Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbIntermediate + humanName: Right Thumb Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_ThumbDistal + humanName: Right Thumb Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexProximal + humanName: Right Index Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexIntermediate + humanName: Right Index Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_IndexDistal + humanName: Right Index Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleProximal + humanName: Right Middle Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleIntermediate + humanName: Right Middle Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_MiddleDistal + humanName: Right Middle Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingProximal + humanName: Right Ring Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingIntermediate + humanName: Right Ring Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_RingDistal + humanName: Right Ring Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyProximal + humanName: Right Little Proximal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyIntermediate + humanName: Right Little Intermediate + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + - boneName: Right_PinkyDistal + humanName: Right Little Distal + limit: + min: {x: 0, y: 0, z: 0} + max: {x: 0, y: 0, z: 0} + value: {x: 0, y: 0, z: 0} + length: 0 + modified: 0 + skeleton: + - name: Mannequin(Clone) + parentName: + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Geometry + parentName: Mannequin(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Mannequin_Mesh + parentName: Geometry + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Skeleton + parentName: Mannequin(Clone) + position: {x: -0, y: 0, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Hips + parentName: Skeleton + position: {x: -0, y: 0.9810986, z: -0.01590455} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_UpperLeg + parentName: Hips + position: {x: -0.08610317, y: -0.053458035, z: -0.011470641} + rotation: {x: 0.999839, y: -0.01775374, z: 0.000046300094, w: -0.0026074864} + scale: {x: 1, y: 1, z: 1} + - name: Left_LowerLeg + parentName: Left_UpperLeg + position: {x: -2.9864513e-16, y: 0.4133444, z: -5.4956034e-17} + rotation: {x: 0.034046065, y: 2.2687323e-19, z: 7.728622e-21, w: 0.9994203} + scale: {x: 1, y: 1, z: 1} + - name: Left_Foot + parentName: Left_LowerLeg + position: {x: 0.0000000017320426, y: 0.41403946, z: 7.141509e-16} + rotation: {x: -0.035700925, y: 0.049957544, z: -0.019575229, w: 0.9979211} + scale: {x: 1, y: 1, z: 1} + - name: Left_Toes + parentName: Left_Foot + position: {x: 7.105427e-17, y: 0.07224803, z: -0.118065506} + rotation: {x: -0.7071068, y: 8.7157646e-33, z: -8.7157646e-33, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Left_ToesEnd + parentName: Left_Toes + position: {x: -0.0010026174, y: 0.06423476, z: 0.016843978} + rotation: {x: 0.7070656, y: -0.0076321815, z: -0.0076321815, w: 0.7070656} + scale: {x: 1, y: 1, z: 1} + - name: Right_UpperLeg + parentName: Hips + position: {x: 0.086103186, y: -0.053458147, z: -0.0114706475} + rotation: {x: 0.0026075041, y: 0.000046300407, z: 0.01775374, w: 0.999839} + scale: {x: 1, y: 1, z: 1} + - name: Right_LowerLeg + parentName: Right_UpperLeg + position: {x: 0.0000004514609, y: -0.41334414, z: 0.000000025994435} + rotation: {x: 0.034046065, y: 2.2687323e-19, z: 7.728622e-21, w: 0.9994203} + scale: {x: 1, y: 1, z: 1} + - name: Right_Foot + parentName: Right_LowerLeg + position: {x: -0.0000007472542, y: -0.41403967, z: -0.000000032847502} + rotation: {x: -0.035700925, y: 0.049957544, z: -0.019575229, w: 0.9979211} + scale: {x: 1, y: 1, z: 1} + - name: Right_Toes + parentName: Right_Foot + position: {x: -0.00000015643121, y: -0.07224799, z: 0.11807} + rotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Right_ToesEnd + parentName: Right_Toes + position: {x: 0.0010031584, y: -0.06423059, z: -0.016843898} + rotation: {x: 0.7070656, y: -0.0076321815, z: -0.0076321815, w: 0.7070656} + scale: {x: 1, y: 1, z: 1} + - name: Spine + parentName: Hips + position: {x: -0, y: 0.058229383, z: 0.0012229546} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Chest + parentName: Spine + position: {x: -0, y: 0.1034043, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: UpperChest + parentName: Chest + position: {x: -0, y: 0.1034043, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_Shoulder + parentName: UpperChest + position: {x: -0.0009571358, y: 0.19149224, z: -0.0087277945} + rotation: {x: -0.0049494267, y: -0.113521874, z: 0.043275386, w: 0.99258024} + scale: {x: 1, y: 1, z: 1} + - name: Left_UpperArm + parentName: Left_Shoulder + position: {x: -0.16743502, y: -5.684341e-16, z: -2.664535e-17} + rotation: {x: 0.12673509, y: 0.03332071, z: 0.6809724, w: 0.72048914} + scale: {x: 1, y: 1, z: 1} + - name: Left_LowerArm + parentName: Left_UpperArm + position: {x: -2.8421706e-16, y: 0.28508067, z: 0} + rotation: {x: 0.020536564, y: 0.00832135, z: -0.020624585, w: 0.9995417} + scale: {x: 1, y: 1, z: 1} + - name: Left_Hand + parentName: Left_LowerArm + position: {x: -2.4123817e-10, y: 0.24036221, z: -1.4210853e-16} + rotation: {x: -0.047397237, y: -0.24003562, z: 0.013464749, w: 0.9695128} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexProximal + parentName: Left_Hand + position: {x: 0.007815497, y: 0.0918443, z: 0.02657316} + rotation: {x: -0.0000789147, y: -0.7104809, z: -0.006305193, w: 0.70368826} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexIntermediate + parentName: Left_IndexProximal + position: {x: 9.079803e-16, y: 0.04209777, z: 3.2607592e-16} + rotation: {x: 0.030199163, y: 0.00000005960465, z: -0.00000038841978, w: 0.9995439} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexDistal + parentName: Left_IndexIntermediate + position: {x: -8.20111e-16, y: 0.02513925, z: -4.317065e-16} + rotation: {x: 0.03945603, y: 0.000000016383924, z: 0.0000000332638, w: 0.9992213} + scale: {x: 1, y: 1, z: 1} + - name: Left_IndexDistalEnd + parentName: Left_IndexDistal + position: {x: -1.1581012e-16, y: 0.024609203, z: -6.661337e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleProximal + parentName: Left_Hand + position: {x: 0.012847862, y: 0.08609763, z: 0.003435423} + rotation: {x: -0.004090429, y: -0.6610811, z: -0.004001968, w: 0.7502927} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleIntermediate + parentName: Left_MiddleProximal + position: {x: 2.7261607e-16, y: 0.051279362, z: 5.988264e-17} + rotation: {x: 0.026233751, y: -0.000000029802322, z: -0.0000007133931, w: 0.99965584} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleDistal + parentName: Left_MiddleIntermediate + position: {x: -7.199101e-17, y: 0.028284006, z: -4.93648e-17} + rotation: {x: 0.03347514, y: -0, z: -0, w: 0.9994396} + scale: {x: 1, y: 1, z: 1} + - name: Left_MiddleDistalEnd + parentName: Left_MiddleDistal + position: {x: -1.7763565e-16, y: 0.023346113, z: -7.105426e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyProximal + parentName: Left_Hand + position: {x: 0.004436847, y: 0.07288173, z: -0.029359013} + rotation: {x: -0.02007038, y: -0.5504896, z: -0.008246153, w: 0.83456} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyIntermediate + parentName: Left_PinkyProximal + position: {x: 1.9539922e-16, y: 0.032272622, z: -1.4210853e-16} + rotation: {x: 0.028115956, y: -0.00000008940699, z: -0.0000005941839, w: 0.9996047} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyDistal + parentName: Left_PinkyIntermediate + position: {x: -3.5527133e-17, y: 0.020224448, z: -7.1054265e-17} + rotation: {x: 0.03643686, y: 0.00000014611446, z: 0.00000018696, w: 0.999336} + scale: {x: 1, y: 1, z: 1} + - name: Left_PinkyDistalEnd + parentName: Left_PinkyDistal + position: {x: -1.2434495e-16, y: 0.018519057, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingProximal + parentName: Left_Hand + position: {x: 0.009525569, y: 0.08161553, z: -0.012242405} + rotation: {x: -0.017654313, y: -0.6026994, z: -0.0040520057, w: 0.79776275} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingIntermediate + parentName: Left_RingProximal + position: {x: 3.3750777e-16, y: 0.043630484, z: -1.4210853e-16} + rotation: {x: 0.023556013, y: 0.00000026822087, z: 0.0000007636844, w: 0.99972254} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingDistal + parentName: Left_RingIntermediate + position: {x: 1.7763566e-17, y: 0.027115494, z: -1.065814e-16} + rotation: {x: 0.03908592, y: -0.000000019744585, z: 0.00000042049942, w: 0.9992359} + scale: {x: 1, y: 1, z: 1} + - name: Left_RingDistalEnd + parentName: Left_RingDistal + position: {x: -7.105426e-17, y: 0.02095726, z: -7.105426e-17} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbProximal + parentName: Left_Hand + position: {x: -0.00080496486, y: 0.028816883, z: 0.023514476} + rotation: {x: 0.1796032, y: 0.8841741, z: 0.4239896, w: -0.07881452} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbIntermediate + parentName: Left_ThumbProximal + position: {x: 2.4357445e-15, y: 0.027578257, z: 0.0038183592} + rotation: {x: 0.1278054, y: -0, z: -0, w: 0.9917993} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbDistal + parentName: Left_ThumbIntermediate + position: {x: -2.2737365e-15, y: 0.044597257, z: -0.006869915} + rotation: {x: -0.045421924, y: -0.00000036741366, z: -0.0000008691409, w: 0.9989679} + scale: {x: 1, y: 1, z: 1} + - name: Left_ThumbDistalEnd + parentName: Left_ThumbDistal + position: {x: -4.2632555e-16, y: 0.029458016, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Neck + parentName: UpperChest + position: {x: -0, y: 0.25104657, z: -0.015329581} + rotation: {x: 0.060688436, y: -0, z: -0, w: 0.9981568} + scale: {x: 1, y: 1, z: 1} + - name: Head + parentName: Neck + position: {x: -0, y: 0.12747401, z: 0} + rotation: {x: -0.060688436, y: 0, z: -0, w: 0.9981568} + scale: {x: 1, y: 1, z: 1} + - name: Jaw + parentName: Head + position: {x: -0, y: -0.00763539, z: 0.012895278} + rotation: {x: 0.15949209, y: 0.68888485, z: 0.15949209, w: 0.68888485} + scale: {x: 1, y: 1, z: 1} + - name: Left_Eye + parentName: Head + position: {x: -0.03330326, y: 0.034598116, z: 0.0867403} + rotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + scale: {x: 1, y: 1, z: 1} + - name: Right_Eye + parentName: Head + position: {x: 0.033303294, y: 0.03459628, z: 0.0867403} + rotation: {x: 0.7071068, y: 4.3297806e-17, z: 0.7071068, w: -4.3297806e-17} + scale: {x: 1, y: 1, z: 1} + - name: Neck_Twist_A + parentName: Neck + position: {x: -0, y: 0.063737005, z: 0} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_Shoulder + parentName: UpperChest + position: {x: 0.0009571358, y: 0.19149381, z: -0.008727803} + rotation: {x: 0.99258024, y: -0.04327539, z: -0.113521874, w: 0.004949396} + scale: {x: 1, y: 1, z: 1} + - name: Right_UpperArm + parentName: Right_Shoulder + position: {x: 0.16743432, y: -0.0000022099182, z: 0.00000012213746} + rotation: {x: 0.1267345, y: 0.033320885, z: 0.68096745, w: 0.720494} + scale: {x: 1, y: 1, z: 1} + - name: Right_LowerArm + parentName: Right_UpperArm + position: {x: 0.0000037273983, y: -0.285085, z: -0.00000035927226} + rotation: {x: 0.020541133, y: 0.008317431, z: -0.020620903, w: 0.99954176} + scale: {x: 1, y: 1, z: 1} + - name: Right_Hand + parentName: Right_LowerArm + position: {x: 0.0000014923929, y: -0.24036367, z: 0.0000017856368} + rotation: {x: -0.047397237, y: -0.24003562, z: 0.013464749, w: 0.9695128} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexProximal + parentName: Right_Hand + position: {x: -0.0078223245, y: -0.0918393, z: -0.026574574} + rotation: {x: -0.00008773989, y: -0.7104814, z: -0.0063276542, w: 0.7036876} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexIntermediate + parentName: Right_IndexProximal + position: {x: 0.0000006924457, y: -0.04210151, z: -0.0000013631077} + rotation: {x: 0.03020306, y: -0.0000005662439, z: 0.000012195228, w: 0.99954385} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexDistal + parentName: Right_IndexIntermediate + position: {x: -0.00000032847043, y: -0.025139209, z: -0.0000005960629} + rotation: {x: 0.03948371, y: -0.000000052504312, z: -0.000005515076, w: 0.99922025} + scale: {x: 1, y: 1, z: 1} + - name: Right_IndexDistalEnd + parentName: Right_IndexDistal + position: {x: 0.00000023984484, y: -0.024609355, z: 0.0000006271131} + rotation: {x: -5.5511138e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleProximal + parentName: Right_Hand + position: {x: -0.012848663, y: -0.08609768, z: -0.0034359337} + rotation: {x: -0.0040856875, y: -0.6610817, z: -0.0040004994, w: 0.7502922} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleIntermediate + parentName: Right_MiddleProximal + position: {x: 0.000000014272595, y: -0.051275954, z: 0.0000009747695} + rotation: {x: 0.026226329, y: -0.0000007450579, z: -0.0000027469353, w: 0.9996561} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleDistal + parentName: Right_MiddleIntermediate + position: {x: 0.00000014287376, y: -0.028283618, z: 0.00000019378916} + rotation: {x: 0.03347514, y: -0, z: -0, w: 0.9994396} + scale: {x: 1, y: 1, z: 1} + - name: Right_MiddleDistalEnd + parentName: Right_MiddleDistal + position: {x: 0.000000038619483, y: -0.023345316, z: 0.0000005352584} + rotation: {x: 0, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyProximal + parentName: Right_Hand + position: {x: -0.0044381507, y: -0.07288141, z: 0.029358566} + rotation: {x: -0.020058475, y: -0.55049545, z: -0.008249418, w: 0.83455646} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyIntermediate + parentName: Right_PinkyProximal + position: {x: 0.00000045734515, y: -0.032268908, z: 0.00000088312623} + rotation: {x: 0.02811499, y: -0.0000035166731, z: -0.00000016298141, w: 0.9996047} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyDistal + parentName: Right_PinkyIntermediate + position: {x: 0.00000023899057, y: -0.02022493, z: 0.00000055474345} + rotation: {x: 0.03642403, y: -0.0000024211556, z: -0.000008829222, w: 0.9993365} + scale: {x: 1, y: 1, z: 1} + - name: Right_PinkyDistalEnd + parentName: Right_PinkyDistal + position: {x: 0.000000632002, y: -0.018518865, z: 0.0000001154108} + rotation: {x: -1.7347236e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingProximal + parentName: Right_Hand + position: {x: -0.00952738, y: -0.08161427, z: 0.012242128} + rotation: {x: -0.017649079, y: -0.6027014, z: -0.0040535578, w: 0.7977614} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingIntermediate + parentName: Right_RingProximal + position: {x: 0.0000000695935, y: -0.04362872, z: 0.00000080048335} + rotation: {x: 0.023547903, y: 0.0000024139879, z: 0.0000069094813, w: 0.9997228} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingDistal + parentName: Right_RingIntermediate + position: {x: -0.000000290747, y: -0.02711462, z: 0.0000000181098} + rotation: {x: 0.039100695, y: 0.00000009656897, z: -0.000004755179, w: 0.99923533} + scale: {x: 1, y: 1, z: 1} + - name: Right_RingDistalEnd + parentName: Right_RingDistal + position: {x: 0.00000008856214, y: -0.020957856, z: 0.0000005565459} + rotation: {x: 9.02056e-17, y: -0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbProximal + parentName: Right_Hand + position: {x: 0.00080341793, y: -0.028816395, z: -0.023514695} + rotation: {x: 0.17960793, y: 0.8841713, z: 0.42399347, w: -0.07881395} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbIntermediate + parentName: Right_ThumbProximal + position: {x: 0.00000015009721, y: -0.02757781, z: -0.0038183848} + rotation: {x: 0.12780538, y: -0, z: -0, w: 0.9917993} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbDistal + parentName: Right_ThumbIntermediate + position: {x: 0.0000007817755, y: -0.044594634, z: 0.0068707783} + rotation: {x: -0.04541878, y: -0.000003060937, z: 0.000004811603, w: 0.99896806} + scale: {x: 1, y: 1, z: 1} + - name: Right_ThumbDistalEnd + parentName: Right_ThumbDistal + position: {x: 0.00000020228964, y: -0.029458148, z: 0.0000009551683} + rotation: {x: -2.7755574e-17, y: 0, z: -0, w: 1} + scale: {x: 1, y: 1, z: 1} + armTwist: 1 + foreArmTwist: 0 + upperLegTwist: 1 + legTwist: 0 + armStretch: 0 + legStretch: 0 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 1 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: f21414af8aee5cb4dabce9f1b23cb9f6, type: 3} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 3 + humanoidOversampling: 1 + avatarSetup: 2 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/All Samples/Common/Animations/Jump--InAir.anim.fbx.meta b/Samples~/All Samples/Common/Animations/Jump--InAir.anim.fbx.meta index 45cc9b1..2e47002 100644 --- a/Samples~/All Samples/Common/Animations/Jump--InAir.anim.fbx.meta +++ b/Samples~/All Samples/Common/Animations/Jump--InAir.anim.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8ce681caf33a8e246950839e6f0ed40d +guid: 04c05a9a08d940e4c9bb533255a65746 ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/Jump--Jump.anim.fbx.meta b/Samples~/All Samples/Common/Animations/Jump--Jump.anim.fbx.meta index 1a0479c..3faa127 100644 --- a/Samples~/All Samples/Common/Animations/Jump--Jump.anim.fbx.meta +++ b/Samples~/All Samples/Common/Animations/Jump--Jump.anim.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1361b762354f698499dc5c3f5a1f32cb +guid: e5e6d2725b7427e4f851a1aa42a82177 ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/Locomotion--Run_N.anim.fbx.meta b/Samples~/All Samples/Common/Animations/Locomotion--Run_N.anim.fbx.meta index 4f55863..56bf429 100644 --- a/Samples~/All Samples/Common/Animations/Locomotion--Run_N.anim.fbx.meta +++ b/Samples~/All Samples/Common/Animations/Locomotion--Run_N.anim.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 24ad0c69d8bb93f4daeaf154a1fa1e4a +guid: 38d51450ba5244a4e88d529b19e5aeca ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/Locomotion--Run_N_Land.anim.fbx.meta b/Samples~/All Samples/Common/Animations/Locomotion--Run_N_Land.anim.fbx.meta index 41889b2..ff2ddc1 100644 --- a/Samples~/All Samples/Common/Animations/Locomotion--Run_N_Land.anim.fbx.meta +++ b/Samples~/All Samples/Common/Animations/Locomotion--Run_N_Land.anim.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c97775d311d708041baf6cbc93c00491 +guid: d2fc600d50c535d4cb153305bc8b0e53 ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/Locomotion--Run_S.anim.fbx.meta b/Samples~/All Samples/Common/Animations/Locomotion--Run_S.anim.fbx.meta index 972aff0..be20588 100644 --- a/Samples~/All Samples/Common/Animations/Locomotion--Run_S.anim.fbx.meta +++ b/Samples~/All Samples/Common/Animations/Locomotion--Run_S.anim.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5ae664dc077c47144acd4832c063df6d +guid: f8d2fc849789e70448721e8e01b569ed ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/Locomotion--Walk_N.anim.fbx.meta b/Samples~/All Samples/Common/Animations/Locomotion--Walk_N.anim.fbx.meta index 82dcf08..f4a20f4 100644 --- a/Samples~/All Samples/Common/Animations/Locomotion--Walk_N.anim.fbx.meta +++ b/Samples~/All Samples/Common/Animations/Locomotion--Walk_N.anim.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9574eaf3f4749d246868388e42b6668f +guid: 0244d5d4e7d1a32479067fcff77c95d9 ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/Locomotion--Walk_N_Land.anim.fbx.meta b/Samples~/All Samples/Common/Animations/Locomotion--Walk_N_Land.anim.fbx.meta index 83a04c1..fa21c1f 100644 --- a/Samples~/All Samples/Common/Animations/Locomotion--Walk_N_Land.anim.fbx.meta +++ b/Samples~/All Samples/Common/Animations/Locomotion--Walk_N_Land.anim.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 958283b7044b16745a9284ed327b44ab +guid: f49262553696bbc4986cda29af7349e9 ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2).fbx.meta b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2).fbx.meta index b036289..1411a96 100644 --- a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2).fbx.meta +++ b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2).fbx.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: f56a43da8dca0c94b8ce1d6072e775eb +guid: 3796885d881f6f34ea67dad399abd3fb ModelImporter: - serializedVersion: 20200 + serializedVersion: 21300 internalIDToNameTable: - first: 74: -203655887218126122 @@ -47,6 +47,7 @@ ModelImporter: bakeSimulation: 0 resampleCurves: 1 optimizeGameObjects: 1 + removeConstantScaleCurves: 0 motionNodeName: rigImportErrors: rigImportWarnings: @@ -77,6 +78,7 @@ ModelImporter: importBlendShapes: 1 importCameras: 1 importLights: 1 + nodeNameCollisionStrategy: 0 fileIdsGeneration: 2 swapUVChannels: 0 generateSecondaryUV: 0 @@ -88,6 +90,7 @@ ModelImporter: skinWeightsMode: 0 maxBonesPerVertex: 4 minBoneWeight: 0.001 + optimizeBones: 1 meshOptimizationFlags: -1 indexFormat: 0 secondaryUVAngleDistortion: 8 @@ -107,11 +110,11 @@ ModelImporter: blendShapeNormalImportMode: 1 normalSmoothingSource: 0 referencedClips: - - 58eb52ca31596ee4bab5c73e8b15acd7 - - 3a44a245f06d5e542a5b1982b4534a76 - - f512fe21542b36c40859aa0089963f2a - - 553e814b70882014daa3921a6029bc6d - - b1aefcbfe98956946b622d89f276849e + - 21538f05ea3744f4ca6d99ff6ee3936b + - 41fb03cb7a756364c845fba55ae1152c + - 1bef3c2d8377d1f48bca55d457fb8eff + - 07d7b180442689e49bb7c43d19d6f870 + - 7f8bf27079ddde847877d4a21470f680 importAnimation: 0 humanDescription: serializedVersion: 3 @@ -886,6 +889,7 @@ ModelImporter: humanoidOversampling: 1 avatarSetup: 1 addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + remapMaterialsIfMaterialImportModeIsNone: 1 additionalBone: 0 userData: assetBundleName: diff --git a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Standing Melee Attack Downward.fbx.meta b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Standing Melee Attack Downward.fbx.meta index f78b8de..24c7769 100644 --- a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Standing Melee Attack Downward.fbx.meta +++ b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Standing Melee Attack Downward.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 58eb52ca31596ee4bab5c73e8b15acd7 +guid: 21538f05ea3744f4ca6d99ff6ee3936b ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Sword And Shield Attack.fbx.meta b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Sword And Shield Attack.fbx.meta index a199e4d..3269e4f 100644 --- a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Sword And Shield Attack.fbx.meta +++ b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Sword And Shield Attack.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3a44a245f06d5e542a5b1982b4534a76 +guid: 41fb03cb7a756364c845fba55ae1152c ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Sword And Shield Block.fbx.meta b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Sword And Shield Block.fbx.meta index 3f94d5e..a2f15e1 100644 --- a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Sword And Shield Block.fbx.meta +++ b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin (2)@Sword And Shield Block.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f512fe21542b36c40859aa0089963f2a +guid: 1bef3c2d8377d1f48bca55d457fb8eff ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin@Idle.fbx.meta b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin@Idle.fbx.meta index c7e8d3f..4601b9b 100644 --- a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin@Idle.fbx.meta +++ b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin@Idle.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 553e814b70882014daa3921a6029bc6d +guid: 07d7b180442689e49bb7c43d19d6f870 ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin@Walking.fbx.meta b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin@Walking.fbx.meta index ca373df..1b4e731 100644 --- a/Samples~/All Samples/Common/Animations/SK_Male_Mannequin@Walking.fbx.meta +++ b/Samples~/All Samples/Common/Animations/SK_Male_Mannequin@Walking.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b1aefcbfe98956946b622d89f276849e +guid: 7f8bf27079ddde847877d4a21470f680 ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/Stand--Idle.anim.fbx.meta b/Samples~/All Samples/Common/Animations/Stand--Idle.anim.fbx.meta index 28a7a48..6aa89c8 100644 --- a/Samples~/All Samples/Common/Animations/Stand--Idle.anim.fbx.meta +++ b/Samples~/All Samples/Common/Animations/Stand--Idle.anim.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: df6ec451e52d23d438991bbf5673d264 +guid: ed0562488b116fc4abcce38bd00d8022 ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Animations/StarterAssetsThirdPerson.controller.meta b/Samples~/All Samples/Common/Animations/StarterAssetsThirdPerson.controller.meta index 44b8dc6..4cb7364 100644 --- a/Samples~/All Samples/Common/Animations/StarterAssetsThirdPerson.controller.meta +++ b/Samples~/All Samples/Common/Animations/StarterAssetsThirdPerson.controller.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b094cf12cfa216b4ba5bcb7e139c3115 +guid: 9c67f40522ca317488d5959e8a43a1d2 NativeFormatImporter: externalObjects: {} mainObjectFileID: 0 diff --git a/Samples~/All Samples/Common/Data/Clips.meta b/Samples~/All Samples/Common/Data/Clips.meta index bc6f995..17ec40d 100644 --- a/Samples~/All Samples/Common/Data/Clips.meta +++ b/Samples~/All Samples/Common/Data/Clips.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6b868d03cd06e4e4e846f5ccd2a0d99e +guid: 90df65aa4f9b0d54292037ddd5545b7b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_CircleSlash.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_CircleSlash.asset.meta index a840acf..eea8d40 100644 --- a/Samples~/All Samples/Common/Data/Clips/Clip_CircleSlash.asset.meta +++ b/Samples~/All Samples/Common/Data/Clips/Clip_CircleSlash.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 41a1290e6a5cb1a448ef4b0b5d7319a9 +guid: 9d018dec06499c946898ce0f264669ec NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Idle.asset b/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Idle.asset new file mode 100644 index 0000000..ce08097 --- /dev/null +++ b/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Idle.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !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: 3a970179cc48494a8f754abfb8687537, type: 3} + m_Name: Clip_Crouching_Idle + m_EditorClassIdentifier: + Clip: {fileID: 1827226128182048838, guid: 9821acc284329da40bebc8bd017ef161, type: 3} + Events: [] diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Idle.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Idle.asset.meta new file mode 100644 index 0000000..8590496 --- /dev/null +++ b/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Idle.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8bc0859fef61c7945863b7da14be93cf +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Walking.asset b/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Walking.asset new file mode 100644 index 0000000..a085e8e --- /dev/null +++ b/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Walking.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !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: 3a970179cc48494a8f754abfb8687537, type: 3} + m_Name: Clip_Crouching_Walking + m_EditorClassIdentifier: + Clip: {fileID: -203655887218126122, guid: a7eeeaa61ff6df14d880d50f7579c105, type: 3} + Events: + - Name: {fileID: 11400000, guid: 76a22800f4761b44b8c6343a5d264b3a, type: 2} + NormalizedTime: 0.28689653 + - Name: {fileID: 11400000, guid: 76a22800f4761b44b8c6343a5d264b3a, type: 2} + NormalizedTime: 0.7696552 diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Walking.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Walking.asset.meta new file mode 100644 index 0000000..a6a8b76 --- /dev/null +++ b/Samples~/All Samples/Common/Data/Clips/Clip_Crouching_Walking.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef6cd90edeb422246ada0da2f39d6433 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_Falling.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_Falling.asset.meta index 88acb7e..b7e108c 100644 --- a/Samples~/All Samples/Common/Data/Clips/Clip_Falling.asset.meta +++ b/Samples~/All Samples/Common/Data/Clips/Clip_Falling.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2fa5654cbbd35e54f9a7b6cf79f67e1d +guid: 6b1e121bbab943847aa41e3b270da004 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_Idle.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_Idle.asset.meta index a890da9..b82e7b9 100644 --- a/Samples~/All Samples/Common/Data/Clips/Clip_Idle.asset.meta +++ b/Samples~/All Samples/Common/Data/Clips/Clip_Idle.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2d8b5b7a11d7f3c418b9a6677c0cc292 +guid: f7ab0deb053cb7f49bde986609043679 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Idle.asset b/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Idle.asset new file mode 100644 index 0000000..45c5f7b --- /dev/null +++ b/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Idle.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !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: 3a970179cc48494a8f754abfb8687537, type: 3} + m_Name: Clip_RifleAiming_Idle + m_EditorClassIdentifier: + Clip: {fileID: 1827226128182048838, guid: 0ac2b19692b2299418cc2152a1def1a3, type: 3} + Events: [] diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Idle.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Idle.asset.meta new file mode 100644 index 0000000..782d538 --- /dev/null +++ b/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Idle.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 65fa5c504679b5f4a8d032b3c07acb70 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Walking.asset b/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Walking.asset new file mode 100644 index 0000000..8af5462 --- /dev/null +++ b/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Walking.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !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: 3a970179cc48494a8f754abfb8687537, type: 3} + m_Name: Clip_RifleAiming_Walking + m_EditorClassIdentifier: + Clip: {fileID: -203655887218126122, guid: d3763d9091af0e54c97062d03c03338e, type: 3} + Events: + - Name: {fileID: 11400000, guid: 76a22800f4761b44b8c6343a5d264b3a, type: 2} + NormalizedTime: 0.442069 + - Name: {fileID: 11400000, guid: 76a22800f4761b44b8c6343a5d264b3a, type: 2} + NormalizedTime: 0.9179311 diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Walking.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Walking.asset.meta new file mode 100644 index 0000000..236937c --- /dev/null +++ b/Samples~/All Samples/Common/Data/Clips/Clip_RifleAiming_Walking.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85ae3405e5633d04cbf874097cf3f38d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_Running.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_Running.asset.meta index 4b1759a..dce71d5 100644 --- a/Samples~/All Samples/Common/Data/Clips/Clip_Running.asset.meta +++ b/Samples~/All Samples/Common/Data/Clips/Clip_Running.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2968d605fb3fd574c84c921e347ab099 +guid: 3dfc98312d28b244aa049d7bbf12795b NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_Slash.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_Slash.asset.meta index 5bd52a2..c3b8db3 100644 --- a/Samples~/All Samples/Common/Data/Clips/Clip_Slash.asset.meta +++ b/Samples~/All Samples/Common/Data/Clips/Clip_Slash.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 411918f1c0037bd4da6262a82555471d +guid: 828ec30949bb27e46b7693b6848b81f9 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/Common/Data/Clips/Clip_Walk.asset.meta b/Samples~/All Samples/Common/Data/Clips/Clip_Walk.asset.meta index ce84174..f0a46f0 100644 --- a/Samples~/All Samples/Common/Data/Clips/Clip_Walk.asset.meta +++ b/Samples~/All Samples/Common/Data/Clips/Clip_Walk.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: df437d5cdddf15d42b3bea5e66e6737f +guid: 891935b060dcab4459bbecd58a3e1497 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/Common/LatiosBootstrap.cs.meta b/Samples~/All Samples/Common/LatiosBootstrap.cs.meta index d8466a7..bef12e4 100644 --- a/Samples~/All Samples/Common/LatiosBootstrap.cs.meta +++ b/Samples~/All Samples/Common/LatiosBootstrap.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9e12767fcc69be040853d646c0d32ac0 +guid: 7274db0ee6ca4f64b929790d36cb4be3 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Samples~/All Samples/Common/MechaShader.shadergraph.meta b/Samples~/All Samples/Common/MechaShader.shadergraph.meta index f4d6e81..c99a691 100644 --- a/Samples~/All Samples/Common/MechaShader.shadergraph.meta +++ b/Samples~/All Samples/Common/MechaShader.shadergraph.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 05d2a29a8ab7ede478369aba245aff05 +guid: 43aa0d1896702c9438a5a8ba166b39ff ScriptedImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Models.meta b/Samples~/All Samples/Common/Models.meta index 169a9f8..c447aa3 100644 --- a/Samples~/All Samples/Common/Models.meta +++ b/Samples~/All Samples/Common/Models.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3789f67fab1f9f441b91cc406eff0c95 +guid: 0e7e3a919889688418ad78a523eec145 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/All Samples/Common/Models/Armature.fbx.meta b/Samples~/All Samples/Common/Models/Armature.fbx.meta index 773be6a..8e3a0b7 100644 --- a/Samples~/All Samples/Common/Models/Armature.fbx.meta +++ b/Samples~/All Samples/Common/Models/Armature.fbx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0442cd22f7e9b6644b585838dbdec0be +guid: f21414af8aee5cb4dabce9f1b23cb9f6 ModelImporter: serializedVersion: 20200 internalIDToNameTable: diff --git a/Samples~/All Samples/Common/Models/M_Arms.mat.meta b/Samples~/All Samples/Common/Models/M_Arms.mat.meta index 24360c9..d77e84b 100644 --- a/Samples~/All Samples/Common/Models/M_Arms.mat.meta +++ b/Samples~/All Samples/Common/Models/M_Arms.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 500b7e0af1b81b443b6f16724a6294ac +guid: aa3481f9df067bf448d39c48575224ef NativeFormatImporter: externalObjects: {} mainObjectFileID: 2100000 diff --git a/Samples~/All Samples/Common/Models/M_Body.mat.meta b/Samples~/All Samples/Common/Models/M_Body.mat.meta index a86de00..e4cce6f 100644 --- a/Samples~/All Samples/Common/Models/M_Body.mat.meta +++ b/Samples~/All Samples/Common/Models/M_Body.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 527809d029c43ab4cbf2b951bbc778e5 +guid: eff16b776a1e92d42809c7180c9d34db NativeFormatImporter: externalObjects: {} mainObjectFileID: 2100000 diff --git a/Samples~/All Samples/Common/Models/M_Legs.mat.meta b/Samples~/All Samples/Common/Models/M_Legs.mat.meta index 28f4b3b..d3f802b 100644 --- a/Samples~/All Samples/Common/Models/M_Legs.mat.meta +++ b/Samples~/All Samples/Common/Models/M_Legs.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c43546eaa8cbfc443b1d6575c30a5d27 +guid: 615e80f2284a039438df93330f0f9a9a NativeFormatImporter: externalObjects: {} mainObjectFileID: 2100000 diff --git a/Samples~/All Samples/Common/Textures.meta b/Samples~/All Samples/Common/Textures.meta index a4a647c..ca60c66 100644 --- a/Samples~/All Samples/Common/Textures.meta +++ b/Samples~/All Samples/Common/Textures.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 77d9d6da2cd6c1f469f7f4ba79e2e7ba +guid: 4d4f2b8e5d364a444a9b224a205dcf7d folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Arms_AlbedoTransparency.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Arms_AlbedoTransparency.tif.meta index 18d315f..5271338 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Arms_AlbedoTransparency.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Arms_AlbedoTransparency.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 509cebee1059c224289017f9cee0e499 +guid: 34e4f1115661fde43a9a1d3400413196 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Arms_MetallicSmoothness.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Arms_MetallicSmoothness.tif.meta index d652285..cdce7a6 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Arms_MetallicSmoothness.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Arms_MetallicSmoothness.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d6d4dd8983a7f3343940d95ac3536611 +guid: b5435d31ce1ee05458fa8645b556791f TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Arms_Normal.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Arms_Normal.tif.meta index 99cb78a..3ce708d 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Arms_Normal.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Arms_Normal.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 10c2c0d3863f8b643ad005ca44071226 +guid: 4ce4649dba152de4a87fc91ee87d1e5a TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Arms_RGB.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Arms_RGB.tif.meta index fef8a99..737281f 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Arms_RGB.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Arms_RGB.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b9ffc1d54a436ec40a1a552c303fa8d5 +guid: 4d9dde52c7e454f4794aa54ecb6c2961 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Body_AlbedoTransparency.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Body_AlbedoTransparency.tif.meta index 58b92e0..2fa3c31 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Body_AlbedoTransparency.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Body_AlbedoTransparency.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 485ed472cccc1bb4d914f16fdd442899 +guid: c805b7ca002b855408c02b2b99a97838 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Body_MetallicSmoothness.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Body_MetallicSmoothness.tif.meta index f7cea80..c6e028b 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Body_MetallicSmoothness.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Body_MetallicSmoothness.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7c265b6cccac6ed47baeadce7d95b476 +guid: 11cb7974a589bf940b7c0c6c6898e26b TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Body_Normal.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Body_Normal.tif.meta index 88cdb03..1758d36 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Body_Normal.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Body_Normal.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a487fe589cbac464c86d3d59fed70e03 +guid: 7a87ce0582aa7444aaf4d69baa4e39b8 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Body_RGB.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Body_RGB.tif.meta index 72ff1a6..9c4d335 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Body_RGB.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Body_RGB.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fe77d5801b06c004b85b3b2bfdf584ad +guid: ee7fcbce3b7bf624ba4663773e5d1da9 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Legs_AlbedoTransparency.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Legs_AlbedoTransparency.tif.meta index 0310272..166d3a8 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Legs_AlbedoTransparency.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Legs_AlbedoTransparency.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dd363fcd1bff037418b990207f47b103 +guid: 8b61b1d368d3a8040a034a585bd9fffd TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Legs_MetallicSmoothness.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Legs_MetallicSmoothness.tif.meta index 78f2e3c..bde2844 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Legs_MetallicSmoothness.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Legs_MetallicSmoothness.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5f7f167de7b5bad489ec71b44bbb8877 +guid: 118f66bda3b12a142a71b9ca448b2dbf TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Legs_Normal.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Legs_Normal.tif.meta index 9f5423a..b279b3a 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Legs_Normal.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Legs_Normal.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fe94bfda890832b4eb5975e9830417e7 +guid: d083363a2282841469be0e3aec730c99 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/Textures/Armature_Legs_RGB.tif.meta b/Samples~/All Samples/Common/Textures/Armature_Legs_RGB.tif.meta index d49f529..fd66f68 100644 --- a/Samples~/All Samples/Common/Textures/Armature_Legs_RGB.tif.meta +++ b/Samples~/All Samples/Common/Textures/Armature_Legs_RGB.tif.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 056bc6f73dfac184fa4a799e81e50994 +guid: 7796537055d08294496f6b8f298c4aba TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/Samples~/All Samples/Common/UniversalRenderPipelineAsset.asset.meta b/Samples~/All Samples/Common/UniversalRenderPipelineAsset.asset.meta index e8b79a8..5fc9c31 100644 --- a/Samples~/All Samples/Common/UniversalRenderPipelineAsset.asset.meta +++ b/Samples~/All Samples/Common/UniversalRenderPipelineAsset.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 07c9492810574a948a34b5b83b11d91c +guid: da3babbc6c60c8e42b91d9269193dc2c NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Samples~/All Samples/Common/UniversalRenderPipelineAsset_Renderer.asset.meta b/Samples~/All Samples/Common/UniversalRenderPipelineAsset_Renderer.asset.meta index ae0f5b7..28675e0 100644 --- a/Samples~/All Samples/Common/UniversalRenderPipelineAsset_Renderer.asset.meta +++ b/Samples~/All Samples/Common/UniversalRenderPipelineAsset_Renderer.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 26ad32d07301c7b4e8b3abd1ad4186ac +guid: c8935f5441310194ebe7d49e7d8de879 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Tests/Editor/Core/AnimationStateTestUtils.cs b/Tests/Editor/Core/AnimationStateTestUtils.cs index 1deba27..01e3d5e 100644 --- a/Tests/Editor/Core/AnimationStateTestUtils.cs +++ b/Tests/Editor/Core/AnimationStateTestUtils.cs @@ -14,13 +14,22 @@ public static void AssertNoTransitionRequest(EntityManager manager, Entity entit $"Expected invalid transition request, but requested is to {animationStateTransitionRequest.AnimationStateId}"); } - public static void AssertCurrentState(EntityManager manager, Entity entity, byte id) + public static void AssertCurrentStateInvalid(EntityManager manager, Entity entity) { var currentAnimationState = manager.GetComponentData(entity); - Assert.IsTrue(currentAnimationState.IsValid); + Assert.IsFalse(currentAnimationState.IsValid, "Expected Animation state not to be valid"); + } + + public static void AssertCurrentState(EntityManager manager, Entity entity, byte id, bool assertWeight = true) + { + var currentAnimationState = manager.GetComponentData(entity); + Assert.IsTrue(currentAnimationState.IsValid, "Expected AnimationCurrentState to be valid"); Assert.AreEqual(id, currentAnimationState.AnimationStateId); - var animationState = GetAnimationStateFromEntity(manager, entity, id); - Assert.AreEqual(1, animationState.Weight); + if (assertWeight) + { + var animationState = GetAnimationStateFromEntity(manager, entity, id); + Assert.AreEqual(1, animationState.Weight); + } } public static void AssertNoOnGoingTransition(EntityManager manager, Entity entity) @@ -31,10 +40,12 @@ public static void AssertNoOnGoingTransition(EntityManager manager, Entity entit $"Expected invalid transition, but transitioning to {animationStateTransition.AnimationStateId}"); } - public static void AssertTransitionRequested(EntityManager manager, Entity entity, byte expectedAnimationStateId) + public static void AssertTransitionRequested(EntityManager manager, Entity entity, + byte expectedAnimationStateId) { var animationStateTransitionRequest = manager.GetComponentData(entity); Assert.IsTrue(animationStateTransitionRequest.IsValid); + Assert.AreEqual(animationStateTransitionRequest.AnimationStateId, expectedAnimationStateId); } public static void AssertOnGoingTransition(EntityManager manager, Entity entity, byte expectedAnimationStateId) @@ -44,7 +55,8 @@ public static void AssertOnGoingTransition(EntityManager manager, Entity entity, var animationStateTransition = manager.GetComponentData(entity); Assert.IsTrue(animationStateTransition.IsValid, "Expect current transition to be active"); - Assert.AreEqual(expectedAnimationStateId, animationStateTransition.AnimationStateId, $"Current transition ({animationStateTransition.AnimationStateId}) different from expected it {expectedAnimationStateId}"); + Assert.AreEqual(expectedAnimationStateId, animationStateTransition.AnimationStateId, + $"Current transition ({animationStateTransition.AnimationStateId}) different from expected it {expectedAnimationStateId}"); } internal static Entity CreateAnimationStateEntity(EntityManager manager) @@ -67,15 +79,20 @@ internal static void SetAnimationState(EntityManager manager, Entity entity, Ani animationStates[index] = animation; } + internal static void SetInvalidCurrentState(EntityManager manager, Entity entity) + { + manager.SetComponentData(entity, AnimationCurrentState.Null); + } + internal static void SetCurrentState(EntityManager manager, Entity entity, byte animationStateId) { - manager.SetComponentData(entity, new AnimationCurrentState{AnimationStateId = (sbyte) animationStateId}); + manager.SetComponentData(entity, new AnimationCurrentState { AnimationStateId = (sbyte)animationStateId }); var animationState = GetAnimationStateFromEntity(manager, entity, animationStateId); animationState.Weight = 1; SetAnimationState(manager, entity, animationState); } - - internal static void TransitionTo(EntityManager manager, Entity entity, byte animationStateId, + + internal static void RequestTransitionTo(EntityManager manager, Entity entity, byte animationStateId, float transitionDuration = 0.1f) { manager.SetComponentData(entity, new AnimationStateTransitionRequest @@ -85,7 +102,19 @@ internal static void TransitionTo(EntityManager manager, Entity entity, byte ani }); } - internal static AnimationState GetAnimationStateFromEntity(EntityManager manager, Entity entity, byte animationStateId) + internal static void SetAnimationStateTransition(EntityManager manager, Entity entity, byte animationStateId, + float transitionDuration = 0.1f) + { + manager.SetComponentData(entity, AnimationStateTransitionRequest.Null); + manager.SetComponentData(entity, new AnimationStateTransition + { + AnimationStateId = (sbyte)animationStateId, + TransitionDuration = transitionDuration + }); + } + + internal static AnimationState GetAnimationStateFromEntity(EntityManager manager, Entity entity, + byte animationStateId) { var animationStates = manager.GetBuffer(entity); return animationStates.GetWithId(animationStateId); @@ -114,7 +143,7 @@ internal static AnimationState NewAnimationStateFromEntity(EntityManager manager Assert.IsTrue(animationStates.ExistsWithId(animationStates[animationStateIndex].Id)); return animationStates[animationStateIndex]; } - + internal static void SetBlendParameter(in LinearBlendStateMachineState linearBlendState, EntityManager manager, Entity entity, float value) { @@ -124,7 +153,7 @@ internal static void SetBlendParameter(in LinearBlendStateMachineState linearBle blendRatio.Value = value; blendParams[blob.BlendParameterIndex] = blendRatio; } - + internal static void FindActiveSamplerIndexesForLinearBlend( in LinearBlendStateMachineState linearBlendState, EntityManager manager, Entity entity, @@ -134,13 +163,17 @@ internal static void FindActiveSamplerIndexesForLinearBlend( LinearBlendStateUtils.ExtractLinearBlendVariablesFromStateMachine( linearBlendState, blendParams, out var blendRatio, out var thresholds); - LinearBlendStateUtils.FindActiveClipIndexes(blendRatio, thresholds, out firstClipIndex, out secondClipIndex); - var startIndex = ClipSamplerTestUtils.AnimationStateStartSamplerIdToIndex(manager, entity, linearBlendState.AnimationStateId); + LinearBlendStateUtils.FindActiveClipIndexes(blendRatio, thresholds, out firstClipIndex, + out secondClipIndex); + var startIndex = + ClipSamplerTestUtils.AnimationStateStartSamplerIdToIndex(manager, entity, + linearBlendState.AnimationStateId); firstClipIndex += startIndex; secondClipIndex += startIndex; } - internal static LinearBlendStateMachineState CreateLinearBlendForStateMachine(short stateIndex, EntityManager manager, Entity entity) + internal static LinearBlendStateMachineState CreateLinearBlendForStateMachine(short stateIndex, + EntityManager manager, Entity entity) { Assert.GreaterOrEqual(stateIndex, 0); var stateMachine = manager.GetComponentData(entity); @@ -158,7 +191,7 @@ internal static LinearBlendStateMachineState CreateLinearBlendForStateMachine(sh ref samplers ); } - + internal static SingleClipState CreateSingleClipState(EntityManager manager, Entity entity, float speed = 1.0f, bool loop = false, @@ -183,10 +216,10 @@ ref samplers internal static BlobAssetReference CreateFakeSkeletonClipSetBlob(int clipCount) { Assert.Greater(clipCount, 0); - var builder = new BlobBuilder(Allocator.Temp); - ref var root = ref builder.ConstructRoot(); + var builder = new BlobBuilder(Allocator.Temp); + ref var root = ref builder.ConstructRoot(); root.boneCount = 1; - var blobClips = builder.Allocate(ref root.clips, clipCount); + var blobClips = builder.Allocate(ref root.clips, clipCount); for (int i = 0; i < clipCount; i++) { blobClips[i] = new SkeletonClip() @@ -197,7 +230,7 @@ internal static BlobAssetReference CreateFakeSkeletonClipSe name = $"Dummy Clip {i}" }; } - + return builder.CreateBlobAssetReference(Allocator.Temp); } } diff --git a/Tests/Editor/Core/StateMachineTestUtils.cs b/Tests/Editor/Core/StateMachineTestUtils.cs index 59dab62..83c741a 100644 --- a/Tests/Editor/Core/StateMachineTestUtils.cs +++ b/Tests/Editor/Core/StateMachineTestUtils.cs @@ -1,10 +1,24 @@ -using NUnit.Framework; +using System.Management.Instrumentation; +using DMotion.Authoring; +using Latios.Kinemation; +using NUnit.Framework; using Unity.Entities; namespace DMotion.Tests { public static class StateMachineTestUtils { + public static Entity CreateStateMachineEntity(this EntityManager manager, StateMachineAsset stateMachineAsset, + BlobAssetReference stateMachineBlob) + { + var entity = manager.CreateEntity(); + AnimationStateMachineConversionUtils.AddStateMachineSystemComponents(manager, entity, stateMachineAsset, + stateMachineBlob, + BlobAssetReference.Null, BlobAssetReference.Null); + AnimationStateMachineConversionUtils.AddAnimationStateSystemComponents(manager, entity); + return entity; + } + public static Entity InstantiateStateMachineEntity(this EntityManager manager, Entity prefab) { var newEntity = manager.Instantiate(prefab); @@ -12,6 +26,31 @@ public static Entity InstantiateStateMachineEntity(this EntityManager manager, E return newEntity; } + public static void RequestTransitionToStateMachine(EntityManager manager, Entity entity) + { + manager.SetComponentData(entity, AnimationStateMachineTransitionRequest.New(0.15f)); + } + + public static bool ShouldStateMachineBeActive(EntityManager manager, Entity entity) + { + Assert.IsTrue(manager.HasComponent(entity)); + Assert.IsTrue(manager.HasComponent(entity)); + Assert.IsTrue(manager.HasComponent(entity)); + Assert.IsTrue(manager.HasComponent(entity)); + + var animationCurrentState = manager.GetComponentData(entity); + var animationStateTransition = manager.GetComponentData(entity); + var stateMachineTransitionRequest = manager.GetComponentData(entity); + var stateMachine = manager.GetComponentData(entity); + return UpdateStateMachineJob.ShouldStateMachineBeActive(animationCurrentState, animationStateTransition, + stateMachineTransitionRequest, stateMachine.CurrentState); + } + internal static StateMachineStateRef GetCurrentState(EntityManager manager, Entity entity) + { + return manager.GetComponentData(entity).CurrentState; + } + + public static void SetBoolParameter(this EntityManager manager, Entity entity, int index, bool newValue) { Assert.IsTrue(manager.HasComponent(entity)); @@ -21,5 +60,26 @@ public static void SetBoolParameter(this EntityManager manager, Entity entity, i parameter.Value = newValue; boolParameters[index] = parameter; } + + public static void SetIntParameter(this EntityManager manager, Entity entity, int index, int newValue) + { + Assert.IsTrue(manager.HasComponent(entity)); + var intParameters = manager.GetBuffer(entity); + Assert.IsTrue(intParameters.Length > 0); + var parameter = intParameters[index]; + parameter.Value = newValue; + intParameters[index] = parameter; + } + + public static void SetParameter(this EntityManager manager, Entity entity, int hash, + TValue newValue) + where TBuffer : struct, IBufferElementData, IStateMachineParameter + where TValue : struct + { + Assert.IsTrue(manager.HasComponent(entity)); + var parameters = manager.GetBuffer(entity); + Assert.IsTrue(parameters.Length > 0); + parameters.SetParameter(hash, newValue); + } } } \ No newline at end of file diff --git a/Tests/Editor/Data/StateMachine_Tests.asset b/Tests/Editor/Data/StateMachine_Tests.asset index a176eee..72ea09d 100644 --- a/Tests/Editor/Data/StateMachine_Tests.asset +++ b/Tests/Editor/Data/StateMachine_Tests.asset @@ -1,5 +1,44 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!114 &-3490424480745318495 +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: 583f2fcb59054a579c1f8b03cf1d88ce, type: 3} + m_Name: MovementMode + m_EditorClassIdentifier: +--- !u!114 &-1463504797061018257 +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: 49a657166d644c459a151994885f8ecd, type: 3} + m_Name: Other Locomotion + m_EditorClassIdentifier: + Loop: 1 + Speed: 1 + OutTransitions: + - ToState: {fileID: 335224122487346526} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: -3490424480745318495} + ComparisonValue: 0 + ComparisonMode: 0 + StateEditorData: + GraphPosition: {x: 419.2, y: 176.20001} + Guid: 79f4ff6f458f96541940db76ed01ee9a + Clip: {fileID: 11400000, guid: 9d018dec06499c946898ce0f264669ec, type: 2} --- !u!114 &-556129329264314096 MonoBehaviour: m_ObjectHideFlags: 0 @@ -28,9 +67,11 @@ MonoBehaviour: States: - {fileID: 335224122487346526} - {fileID: 5953759798062009019} + - {fileID: -1463504797061018257} Parameters: - {fileID: -556129329264314096} - {fileID: 9102714923962245846} + - {fileID: -3490424480745318495} --- !u!114 &335224122487346526 MonoBehaviour: m_ObjectHideFlags: 0 @@ -54,6 +95,14 @@ MonoBehaviour: - Parameter: {fileID: 9102714923962245846} ComparisonValue: 1 ComparisonMode: 0 + - ToState: {fileID: -1463504797061018257} + HasEndTime: 0 + EndTime: 0 + TransitionDuration: 0.15 + Conditions: + - Parameter: {fileID: -3490424480745318495} + ComparisonValue: 1 + ComparisonMode: 0 StateEditorData: GraphPosition: {x: 180.40001, y: 96.2} Guid: 039c0298c5d43d943b7bc7b34f1395c0 diff --git a/Tests/Editor/Tests/BlendAnimationStatesSystemShould.cs b/Tests/Editor/Tests/BlendAnimationStatesSystemShould.cs index 5b868e1..6eaeaf0 100644 --- a/Tests/Editor/Tests/BlendAnimationStatesSystemShould.cs +++ b/Tests/Editor/Tests/BlendAnimationStatesSystemShould.cs @@ -8,6 +8,14 @@ namespace DMotion.Tests [CreateSystemsForTest(typeof(BlendAnimationStatesSystem))] public class BlendAnimationStatesSystemShould : ECSTestsFixture { + [Test] + public void Run_With_Valid_Queries() + { + AnimationStateTestUtils.CreateAnimationStateEntity(manager); + UpdateWorld(); + ECSTestUtils.AssertSystemQueries(world); + } + [Test] public void Create_New_AnimationState() { @@ -51,7 +59,7 @@ public void InstantlyTransition_If_CurrentState_IsNotValid() var currentState = manager.GetComponentData(entity); Assert.IsFalse(currentState.IsValid); - AnimationStateTestUtils.TransitionTo(manager, entity, animationState.Id); + AnimationStateTestUtils.RequestTransitionTo(manager, entity, animationState.Id); //Force animationState to not be cleaned-up animationState.Weight = 1; @@ -65,17 +73,17 @@ public void InstantlyTransition_If_CurrentState_IsNotValid() [Test] public void StartTransition_From_Request() { - const float transitionDuration = 0.1f; var entity = AnimationStateTestUtils.CreateAnimationStateEntity(manager); + var initialState = + AnimationStateTestUtils.NewAnimationStateFromEntity(manager, entity, default(ClipSampler)); + AnimationStateTestUtils.SetCurrentState(manager, entity, initialState.Id); + var animationState = AnimationStateTestUtils.NewAnimationStateFromEntity(manager, entity, default(ClipSampler)); + AnimationStateTestUtils.AssertNoOnGoingTransition(manager, entity); - Assert.IsFalse(manager.GetComponentData(entity).IsValid); + AnimationStateTestUtils.AssertCurrentState(manager, entity, initialState.Id); - manager.SetComponentData(entity, new AnimationStateTransitionRequest - { - AnimationStateId = (sbyte)animationState.Id, - TransitionDuration = transitionDuration - }); + AnimationStateTestUtils.RequestTransitionTo(manager, entity, animationState.Id); UpdateWorld(); AnimationStateTestUtils.AssertOnGoingTransition(manager, entity, animationState.Id); @@ -84,29 +92,27 @@ public void StartTransition_From_Request() [Test] public void StartTransition_From_Request_Even_When_Transitioning() { - const float transitionDuration = 0.1f; var entity = AnimationStateTestUtils.CreateAnimationStateEntity(manager); + var initialState = + AnimationStateTestUtils.NewAnimationStateFromEntity(manager, entity, default(ClipSampler)); + AnimationStateTestUtils.SetCurrentState(manager, entity, initialState.Id); + var animationState = AnimationStateTestUtils.NewAnimationStateFromEntity(manager, entity, default(ClipSampler)); AnimationStateTestUtils.AssertNoOnGoingTransition(manager, entity); - Assert.IsFalse(manager.GetComponentData(entity).IsValid); + AnimationStateTestUtils.AssertCurrentState(manager, entity, initialState.Id); - manager.SetComponentData(entity, new AnimationStateTransitionRequest - { - AnimationStateId = (sbyte)animationState.Id, - TransitionDuration = transitionDuration - }); + AnimationStateTestUtils.RequestTransitionTo(manager, entity, animationState.Id); UpdateWorld(); AnimationStateTestUtils.AssertOnGoingTransition(manager, entity, animationState.Id); var secondAnimationState = AnimationStateTestUtils.NewAnimationStateFromEntity(manager, entity, default(ClipSampler)); - manager.SetComponentData(entity, new AnimationStateTransitionRequest - { - AnimationStateId = (sbyte)secondAnimationState.Id - }); + AnimationStateTestUtils.RequestTransitionTo(manager, entity, secondAnimationState.Id); UpdateWorld(); + //we still expected the current state to be the initial state. Previous transition was interrupted + AnimationStateTestUtils.AssertCurrentState(manager, entity, initialState.Id, assertWeight: false); AnimationStateTestUtils.AssertOnGoingTransition(manager, entity, secondAnimationState.Id); } @@ -121,7 +127,7 @@ public void EndTransition_After_TransitionDuration() AnimationStateTestUtils.AssertNoOnGoingTransition(manager, entity); AnimationStateTestUtils.AssertCurrentState(manager, entity, 0); - AnimationStateTestUtils.TransitionTo(manager, entity, animationState.Id, transitionDuration); + AnimationStateTestUtils.RequestTransitionTo(manager, entity, animationState.Id, transitionDuration); //update a couple of times and make sure we're still transitioning for (var i = 0; i < 3; i++) @@ -145,7 +151,7 @@ public void IncreaseWeight_During_Transition() AnimationStateTestUtils.AssertNoOnGoingTransition(manager, entity); AnimationStateTestUtils.SetCurrentState(manager, entity, p1.Id); - AnimationStateTestUtils.TransitionTo(manager, entity, p2.Id); + AnimationStateTestUtils.RequestTransitionTo(manager, entity, p2.Id); var weight = p2.Weight; Assert.Zero(weight); diff --git a/Tests/Editor/Tests/LinearBlendStateMachineSystemShould.cs b/Tests/Editor/Tests/LinearBlendStateMachineSystemShould.cs index f4827a5..4388a04 100644 --- a/Tests/Editor/Tests/LinearBlendStateMachineSystemShould.cs +++ b/Tests/Editor/Tests/LinearBlendStateMachineSystemShould.cs @@ -134,7 +134,7 @@ public void CleanupStates() Assert.AreEqual(1, linearBlendStates.Length); const float transitionDuration = 0.2f; - AnimationStateTestUtils.TransitionTo(manager, entity, anotherState.AnimationStateId, transitionDuration); + AnimationStateTestUtils.RequestTransitionTo(manager, entity, anotherState.AnimationStateId, transitionDuration); UpdateWorld(); diff --git a/Tests/Editor/Tests/SingleClipStateSystemShould.cs b/Tests/Editor/Tests/SingleClipStateSystemShould.cs index c3c1936..1c566aa 100644 --- a/Tests/Editor/Tests/SingleClipStateSystemShould.cs +++ b/Tests/Editor/Tests/SingleClipStateSystemShould.cs @@ -72,7 +72,7 @@ public void CleanupStates() Assert.AreEqual(2, samplers.Length); const float transitionDuration = 0.2f; - AnimationStateTestUtils.TransitionTo(manager, entity, s2.AnimationStateId, transitionDuration); + AnimationStateTestUtils.RequestTransitionTo(manager, entity, s2.AnimationStateId, transitionDuration); UpdateWorld(); diff --git a/Tests/Editor/Tests/StateMachineTransitionsShould.cs b/Tests/Editor/Tests/StateMachineTransitionsShould.cs new file mode 100644 index 0000000..56015bb --- /dev/null +++ b/Tests/Editor/Tests/StateMachineTransitionsShould.cs @@ -0,0 +1,155 @@ +using DMotion.Authoring; +using NUnit.Framework; + +namespace DMotion.Tests +{ + [CreateSystemsForTest(typeof(AnimationStateMachineSystem))] + public class StateMachineTransitionsShould : ECSTestsFixture + { + [Test] + public void StartTransition_When_BoolParameter_True() + { + AssertBoolTransition(BoolConditionComparison.True, true, true); + AssertBoolTransition(BoolConditionComparison.True, false, false); + } + + [Test] + public void StartTransition_When_BoolParameter_False() + { + AssertBoolTransition(BoolConditionComparison.False, false, true); + AssertBoolTransition(BoolConditionComparison.False, true, false); + } + + [Test] + public void StartTransition_When_IntParameter_Equals() + { + AssertIntTransition(IntConditionComparison.Equal, 1, 1, true); + AssertIntTransition(IntConditionComparison.Equal, 0, 1, false); + } + + [Test] + public void StartTransition_When_IntParameter_NotEquals() + { + AssertIntTransition(IntConditionComparison.NotEqual, 1, 2, true); + AssertIntTransition(IntConditionComparison.NotEqual, 1, 1, false); + } + + [Test] + public void StartTransition_When_IntParameter_Greater() + { + AssertIntTransition(IntConditionComparison.Greater, 1, 2, true); + AssertIntTransition(IntConditionComparison.Greater, 1, 1, false); + AssertIntTransition(IntConditionComparison.Greater, 1, 0, false); + } + + [Test] + public void StartTransition_When_IntParameter_GreaterOrEqual() + { + AssertIntTransition(IntConditionComparison.GreaterOrEqual, 1, 2, true); + AssertIntTransition(IntConditionComparison.GreaterOrEqual, 1, 1, true); + AssertIntTransition(IntConditionComparison.GreaterOrEqual, 1, 0, false); + } + + [Test] + public void StartTransition_When_IntParameter_Less() + { + AssertIntTransition(IntConditionComparison.Less, 1, 0, true); + AssertIntTransition(IntConditionComparison.Less, 1, 1, false); + AssertIntTransition(IntConditionComparison.Less, 1, 2, false); + } + + [Test] + public void StartTransition_When_IntParameter_LessOrEqual() + { + AssertIntTransition(IntConditionComparison.LessOrEqual, 1, 0, true); + AssertIntTransition(IntConditionComparison.LessOrEqual, 1, 1, true); + AssertIntTransition(IntConditionComparison.LessOrEqual, 1, 2, false); + } + + private void AssertBoolTransition(BoolConditionComparison comparison, bool valueToSet, + bool expectTransitionToStart) + { + CreateStateMachineWithBoolTransition(comparison, out var stateMachineAsset, + out _, out _, + out var boolParameter); + + var stateMachineBlob = + AnimationStateMachineConversionUtils.CreateStateMachineBlob(stateMachineAsset, + world.UpdateAllocator.ToAllocator); + + var newEntity = manager.CreateStateMachineEntity(stateMachineAsset, stateMachineBlob); + AnimationStateTestUtils.AssertNoOnGoingTransition(manager, newEntity); + + var boolParameterHash = boolParameter.Hash; + manager.SetParameter(newEntity, boolParameterHash, valueToSet); + UpdateWorld(); + var stateMachine = manager.GetComponentData(newEntity); + Assert.IsTrue(stateMachine.CurrentState.IsValid); + + var expectedIndex = expectTransitionToStart ? 1 : 0; + Assert.AreEqual(expectedIndex, stateMachine.CurrentState.StateIndex); + AnimationStateTestUtils.AssertTransitionRequested(manager, newEntity, + (byte)stateMachine.CurrentState.AnimationStateId); + } + + private void AssertIntTransition(IntConditionComparison comparison, int comparisonValue, int valueToSet, + bool expectTransitionToStart) + { + CreateStateMachineWithIntTransition(comparison, comparisonValue, out var stateMachineAsset, + out _, out _, + out var intParameter); + + var stateMachineBlob = + AnimationStateMachineConversionUtils.CreateStateMachineBlob(stateMachineAsset, + world.UpdateAllocator.ToAllocator); + + var newEntity = manager.CreateStateMachineEntity(stateMachineAsset, stateMachineBlob); + AnimationStateTestUtils.AssertNoOnGoingTransition(manager, newEntity); + + var intParameterHash = intParameter.Hash; + manager.SetParameter(newEntity, intParameterHash, valueToSet); + UpdateWorld(); + var stateMachine = manager.GetComponentData(newEntity); + Assert.IsTrue(stateMachine.CurrentState.IsValid); + + var expectedIndex = expectTransitionToStart ? 1 : 0; + Assert.AreEqual(expectedIndex, stateMachine.CurrentState.StateIndex); + AnimationStateTestUtils.AssertTransitionRequested(manager, newEntity, + (byte)stateMachine.CurrentState.AnimationStateId); + } + + private void CreateStateMachineWithIntTransition(IntConditionComparison comparison, int comparisonValue, + out StateMachineAsset stateMachineAsset, + out AnimationStateAsset stateOne, out AnimationStateAsset stateTwo, + out IntParameterAsset intParameter) + { + var stateMachineBuilder = AnimationStateMachineAssetBuilder.New(); + stateOne = stateMachineBuilder.AddState(); + stateTwo = stateMachineBuilder.AddState(); + intParameter = stateMachineBuilder.AddParameter("intParam"); + + var transitionOneTwo = stateMachineBuilder.AddTransition(stateOne, stateTwo); + stateMachineBuilder.AddIntCondition(transitionOneTwo, intParameter, + comparison, comparisonValue); + + stateMachineAsset = stateMachineBuilder.Build(); + } + + private void CreateStateMachineWithBoolTransition(BoolConditionComparison comparison, + out StateMachineAsset stateMachineAsset, + out AnimationStateAsset stateOne, out AnimationStateAsset stateTwo, + out BoolParameterAsset boolParameter) + { + var stateMachineBuilder = AnimationStateMachineAssetBuilder.New(); + stateOne = stateMachineBuilder.AddState(); + stateTwo = stateMachineBuilder.AddState(); + boolParameter = stateMachineBuilder.AddParameter("boolParam"); + + var transitionOneTwo = stateMachineBuilder.AddTransition(stateOne, stateTwo); + stateMachineBuilder.AddBoolCondition(transitionOneTwo, boolParameter, + comparison); + + stateMachineAsset = stateMachineBuilder.Build(); + } + } +} \ No newline at end of file diff --git a/Tests/Editor/Tests/StateMachineTransitionsShould.cs.meta b/Tests/Editor/Tests/StateMachineTransitionsShould.cs.meta new file mode 100644 index 0000000..e5c9514 --- /dev/null +++ b/Tests/Editor/Tests/StateMachineTransitionsShould.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c499223612a54bf3b0ff8df5115e9737 +timeCreated: 1665625701 \ No newline at end of file diff --git a/Tests/Editor/Tests/UpdateStateMachineJobShould.cs b/Tests/Editor/Tests/UpdateStateMachineJobShould.cs index be054cd..71f125e 100644 --- a/Tests/Editor/Tests/UpdateStateMachineJobShould.cs +++ b/Tests/Editor/Tests/UpdateStateMachineJobShould.cs @@ -20,25 +20,88 @@ public void Run_With_Valid_Queries() UpdateWorld(); ECSTestUtils.AssertSystemQueries(world); } + + [Test] + public void Be_Active_When_AnimationStateNotValid() + { + var newEntity = manager.InstantiateStateMachineEntity(stateMachineEntityPrefab); + AnimationStateTestUtils.SetInvalidCurrentState(manager, newEntity); + AnimationStateTestUtils.AssertCurrentStateInvalid(manager, newEntity); + var shouldBeActive = StateMachineTestUtils.ShouldStateMachineBeActive(manager, newEntity); + Assert.IsTrue(shouldBeActive, "Expected state machine should be active if current animation state is invalid"); + } + + [Test] + public void Be_Active_When_StateMachineTransitionIsRequested() + { + var newEntity = manager.InstantiateStateMachineEntity(stateMachineEntityPrefab); + var singleState = AnimationStateTestUtils.CreateSingleClipState(manager, newEntity); + AnimationStateTestUtils.SetCurrentState(manager, newEntity, singleState.AnimationStateId); + UpdateWorld(); + AnimationStateTestUtils.AssertCurrentState(manager, newEntity, singleState.AnimationStateId); + + StateMachineTestUtils.RequestTransitionToStateMachine(manager, newEntity); + + var shouldBeActive = StateMachineTestUtils.ShouldStateMachineBeActive(manager, newEntity); + Assert.IsTrue(shouldBeActive, "Expected state machine should be active if state machine transition is requested"); + } + + [Test] + public void Be_Active_When_CurrentStateMachineState_Is_CurrentAnimationState() + { + var entity = manager.InstantiateStateMachineEntity(stateMachineEntityPrefab); + UpdateWorld(); + var currentState = StateMachineTestUtils.GetCurrentState(manager, entity); + Assert.IsTrue(currentState.IsValid); + AnimationStateTestUtils.SetCurrentState(manager, entity, (byte)currentState.AnimationStateId); + + manager.SetComponentData(entity, AnimationStateMachineTransitionRequest.Null); + + AnimationStateTestUtils.AssertCurrentState(manager, entity, (byte)currentState.AnimationStateId); + + var shouldBeActive = StateMachineTestUtils.ShouldStateMachineBeActive(manager, entity); + Assert.IsTrue(shouldBeActive, "Expected state machine should be active if Current State Machine State is current Animation State"); + } + [Test] + public void Be_Active_When_CurrentStateMachineState_Is_AnimationStateTransition() + { + var entity = manager.InstantiateStateMachineEntity(stateMachineEntityPrefab); + UpdateWorld(); + + var singleState = AnimationStateTestUtils.CreateSingleClipState(manager, entity); + AnimationStateTestUtils.SetCurrentState(manager, entity, singleState.AnimationStateId); + + var currentState = StateMachineTestUtils.GetCurrentState(manager, entity); + Assert.IsTrue(currentState.IsValid); + + AnimationStateTestUtils.SetAnimationStateTransition(manager, entity, (byte)currentState.AnimationStateId); + AnimationStateTestUtils.AssertOnGoingTransition(manager, entity, (byte)currentState.AnimationStateId); + + manager.SetComponentData(entity, AnimationStateMachineTransitionRequest.Null); + + var shouldBeActive = StateMachineTestUtils.ShouldStateMachineBeActive(manager, entity); + Assert.IsTrue(shouldBeActive, "Expected state machine should be active if Current State Machine State is Animation State Transition"); + } [Test] public void NotInitialize_If_NotPlaying() { var newEntity = manager.InstantiateStateMachineEntity(stateMachineEntityPrefab); - var stateMachine = manager.GetComponentData(newEntity); - Assert.AreEqual(stateMachine.CurrentState, StateMachineStateRef.Null); + var currentState = StateMachineTestUtils.GetCurrentState(manager, newEntity); + Assert.AreEqual(currentState, StateMachineStateRef.Null); //Set a random current animationState that is not us - manager.SetComponentData(newEntity, new AnimationCurrentState - { - AnimationStateId = 1 - }); + var otherState = + AnimationStateTestUtils.NewAnimationStateFromEntity(manager, newEntity, default(ClipSampler)); + AnimationStateTestUtils.SetCurrentState(manager, newEntity, otherState.Id); + var shouldBeActive = StateMachineTestUtils.ShouldStateMachineBeActive(manager, newEntity); + Assert.IsFalse(shouldBeActive, "Expected state machine not to be active"); UpdateWorld(); //We shouldn't have initialized - stateMachine = manager.GetComponentData(newEntity); - Assert.AreEqual(stateMachine.CurrentState, StateMachineStateRef.Null); + currentState = StateMachineTestUtils.GetCurrentState(manager, newEntity); + Assert.AreEqual(currentState, StateMachineStateRef.Null, "Expected state machine not to have initialized"); } [Test] @@ -54,27 +117,6 @@ public void Initialize_When_Necessary() Assert.AreNotEqual(stateMachine.CurrentState, StateMachineStateRef.Null); } - // [Test] - // public void UpdateActiveSamplers() - // { - // var newEntity = manager.InstantiateStateMachineEntity(stateMachineEntityPrefab); - // Assert.IsTrue(manager.HasComponent(newEntity)); - // UpdateWorld(); - // - // var samplersBefore = manager.GetBuffer(newEntity).ToNativeArray(Allocator.Temp); - // UpdateWorld(); - // var samplersAfter = manager.GetBuffer(newEntity).ToNativeArray(Allocator.Temp); - // - // Assert.NotZero(samplersBefore.Length); - // Assert.AreEqual(samplersBefore.Length, samplersAfter.Length); - // for (var i = 0; i < samplersBefore.Length; i++) - // { - // var before = samplersBefore[i]; - // var after = samplersAfter[i]; - // Assert.Greater(after.Time, before.Time); - // } - // } - [Test] public void StartTransition_From_BoolParameter() { @@ -88,24 +130,17 @@ public void StartTransition_From_BoolParameter() AnimationStateTestUtils.AssertTransitionRequested(manager, newEntity, (byte)stateMachine.CurrentState.AnimationStateId); } - // [Test] - // public void CompleteTransition_After_TransitionDuration() - // { - // var newEntity = manager.InstantiateStateMachineEntity(stateMachineEntityPrefab); - // manager.SetBoolParameter(newEntity, 0, true); - // UpdateWorld(); - // - // var stateMachine = manager.GetComponentData(newEntity); - // var cachedNextState = stateMachine.NextState; - // Assert.AreNotEqual(cachedNextState, StateMachineStateRef.Null); - // - // UpdateWorld(stateMachine.CurrentTransitionDuration * 1.5f); - // UpdateWorld(); - // - // stateMachine = manager.GetComponentData(newEntity); - // Assert.AreEqual(stateMachine.NextState, StateMachineStateRef.Null); - // Assert.AreEqual(stateMachine.CurrentState.StateIndex, cachedNextState.StateIndex); - // Assert.AreEqual(stateMachine.CurrentState.Type, cachedNextState.Type); - // } + [Test] + public void StartTransition_From_IntParameter() + { + var newEntity = manager.InstantiateStateMachineEntity(stateMachineEntityPrefab); + AnimationStateTestUtils.AssertNoOnGoingTransition(manager, newEntity); + manager.SetIntParameter(newEntity, 0, 1); + UpdateWorld(); + + var stateMachine = manager.GetComponentData(newEntity); + Assert.IsTrue(stateMachine.CurrentState.IsValid); + AnimationStateTestUtils.AssertTransitionRequested(manager, newEntity, (byte)stateMachine.CurrentState.AnimationStateId); + } } } \ No newline at end of file diff --git a/Tests/Editor/Tests/UpdateStateMachineJobShould.cs.meta b/Tests/Editor/Tests/UpdateStateMachineJobShould.cs.meta index 42ce479..fc86484 100644 --- a/Tests/Editor/Tests/UpdateStateMachineJobShould.cs.meta +++ b/Tests/Editor/Tests/UpdateStateMachineJobShould.cs.meta @@ -5,6 +5,8 @@ MonoImporter: serializedVersion: 2 defaultReferences: - stateMachinePrefab: {fileID: 3933796299544104853, guid: af9d020e6d232fc499c6cc7e3a34de8f, type: 3} + - boolParameter: {fileID: -8447519872970154950, guid: 9640d20d2a36ab941aa69db1a5053a55, type: 2} + - intParameterAsset: {instanceID: 0} executionOrder: 0 icon: {instanceID: 0} userData: diff --git a/package.json b/package.json index 6dedc32..58e2ce2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.gamedevpro.dmotion", "displayName": "DMotion", - "version": "0.3.2", + "version": "0.3.3", "unity": "2020.3", "description": "DMotion is a high level Animation framework and State Machine for DOTS", "dependencies": {