├── CHANGELOG.md ├── CHANGELOG.md.meta ├── Documentation.meta ├── Documentation ├── animationSetup.gif ├── animationSetup.gif.meta ├── animator.gif └── animator.gif.meta ├── Editor.meta ├── Editor ├── AnimExpress.Editor.asmdef ├── AnimExpress.Editor.asmdef.meta ├── AnimationExpressCreatorTool.cs ├── AnimationExpressCreatorTool.cs.meta ├── AnimationExpressCustomEditor.cs ├── AnimationExpressCustomEditor.cs.meta ├── AnimationExpressEditorUtils.cs ├── AnimationExpressEditorUtils.cs.meta ├── AnimationExpressPropertyDrawer.cs ├── AnimationExpressPropertyDrawer.cs.meta ├── FramePropertyDrawer.cs ├── FramePropertyDrawer.cs.meta ├── Icons.meta └── Icons │ ├── AnimationExpressIcon.png │ ├── AnimationExpressIcon.png.meta │ ├── AnimatorExpressIcon.png │ └── AnimatorExpressIcon.png.meta ├── Examples.meta ├── Examples ├── CharacterAnimExpress.meta └── CharacterAnimExpress │ ├── Player.aseprite │ ├── Player.aseprite.meta │ ├── SampleCharacterAnimExpress.unity │ ├── SampleCharacterAnimExpress.unity.meta │ ├── SpriteSheets.meta │ └── SpriteSheets │ ├── Animations.meta │ ├── Animations │ ├── Player-DeathWater.asset │ ├── Player-DeathWater.asset.meta │ ├── Player-Idle.asset │ ├── Player-Idle.asset.meta │ ├── Player-Jump.asset │ ├── Player-Jump.asset.meta │ ├── Player-Praying.asset │ ├── Player-Praying.asset.meta │ ├── Player-Walk.asset │ └── Player-Walk.asset.meta │ ├── Player-DeathWater.png │ ├── Player-DeathWater.png.meta │ ├── Player-Idle.png │ ├── Player-Idle.png.meta │ ├── Player-Jump.png │ ├── Player-Jump.png.meta │ ├── Player-Praying.png │ ├── Player-Praying.png.meta │ ├── Player-Walk.png │ └── Player-Walk.png.meta ├── LICENSE.md ├── LICENSE.md.meta ├── README.md ├── README.md.meta ├── Runtime.meta ├── Runtime ├── AnimExpress.Runtime.asmdef ├── AnimExpress.Runtime.asmdef.meta ├── AnimationExpress.cs ├── AnimationExpress.cs.meta ├── AnimationExpressCompletionOptions.cs ├── AnimationExpressCompletionOptions.cs.meta ├── AnimatorExpress.cs ├── AnimatorExpress.cs.meta ├── Frame.cs └── Frame.cs.meta ├── Tests.meta ├── Tests ├── Runtime.meta └── Runtime │ ├── AnimExpress.Tests.asmdef │ ├── AnimExpress.Tests.asmdef.meta │ ├── AnimatorTester.cs │ └── AnimatorTester.cs.meta ├── package.json └── package.json.meta /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 0.1.4 2 | - Start animation on enable callback 3 | - Update package description 4 | - Fix animation entry null cases 5 | - Fix meta file aseprite asset 6 | 7 | # 0.1.3 8 | - Add texture image preview on animation inspector 9 | - Refactor frame event handling 10 | - Add playing progress inspector animation 11 | 12 | # 0.1.2 13 | - Add more details in package.json 14 | - Reorganize assemblies 15 | - Rename name-spaces 16 | - Clean testing script references on runtime scripts 17 | 18 | # 0.1.1 19 | - Adjust frame naming to fix list ordering 20 | - Add option for triggering special behavior on frame completion 21 | - Clean unused scripts 22 | - Display total duration of a frame 23 | - Add method to stop current animation 24 | 25 | # 0.1.0 26 | - Import base logics of this repository 27 | - Setup base configurations -------------------------------------------------------------------------------- /CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 60abd57bda3867b4c87fd61a32ce9a7b 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Documentation.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4950dd1ad22f7e549a22ab20c4e354e7 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Documentation/animationSetup.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Documentation/animationSetup.gif -------------------------------------------------------------------------------- /Documentation/animationSetup.gif.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 077baeaffc595664c889317fc7564cdf 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 0 120 | pSDShowRemoveMatteOption: 0 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Documentation/animator.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Documentation/animator.gif -------------------------------------------------------------------------------- /Documentation/animator.gif.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 07ee2e305ac6e654592f68b087e15bbb 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 1 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | spriteSheet: 105 | serializedVersion: 2 106 | sprites: [] 107 | outline: [] 108 | physicsShape: [] 109 | bones: [] 110 | spriteID: 5e97eb03825dee720800000000000000 111 | internalID: 0 112 | vertices: [] 113 | indices: 114 | edges: [] 115 | weights: [] 116 | secondaryTextures: [] 117 | nameFileIdTable: {} 118 | spritePackingTag: 119 | pSDRemoveMatte: 0 120 | pSDShowRemoveMatteOption: 0 121 | userData: 122 | assetBundleName: 123 | assetBundleVariant: 124 | -------------------------------------------------------------------------------- /Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0ee892e1ffae6fd4ab3cc170ca1a704e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/AnimExpress.Editor.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AnimExpress.Editor", 3 | "rootNamespace": "", 4 | "references": [ 5 | "GUID:a1928c647970bdc40a5b951ad60a7fc9" 6 | ], 7 | "includePlatforms": [ 8 | "Editor" 9 | ], 10 | "excludePlatforms": [], 11 | "allowUnsafeCode": false, 12 | "overrideReferences": false, 13 | "precompiledReferences": [], 14 | "autoReferenced": true, 15 | "defineConstraints": [], 16 | "versionDefines": [], 17 | "noEngineReferences": false 18 | } -------------------------------------------------------------------------------- /Editor/AnimExpress.Editor.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1cf999cc7591d3a4d886d6061ee88ac0 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Editor/AnimationExpressCreatorTool.cs: -------------------------------------------------------------------------------- 1 | using AnimExpress; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using UnityEditor; 6 | using UnityEngine; 7 | 8 | namespace AnimExpressEditor 9 | { 10 | public static class AnimationExpressCreatorTool 11 | { 12 | private const string SUBFODLER = "Animations"; 13 | 14 | [MenuItem("CONTEXT/TextureImporter/Create Animations", priority = 1000)] 15 | private static void CopySettings(MenuCommand command) 16 | { 17 | TextureImporter textureImporter = (TextureImporter)command.context; 18 | string path = AssetDatabase.GetAssetPath(textureImporter); 19 | string folderPath = Path.GetDirectoryName(path); 20 | string fileName = Path.GetFileName(path).Replace(".png", ""); 21 | 22 | string newFodlerPath = Path.Combine(folderPath, SUBFODLER); 23 | if (!Directory.Exists(newFodlerPath)) 24 | { 25 | Directory.CreateDirectory(newFodlerPath); 26 | } 27 | 28 | string newAssetName = Path.Combine(newFodlerPath, $"{fileName}.asset"); 29 | var existingAsset = AssetDatabase.LoadAssetAtPath(newAssetName); 30 | if (existingAsset is not null) return; 31 | 32 | UpdateSpriteName(command); 33 | 34 | Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(path).OfType().ToArray(); 35 | sprites = sprites.OrderBy(x => x.name).ToArray(); 36 | 37 | List frames = new List(); 38 | for (int i = 0; i < sprites.Length; i++) 39 | { 40 | Frame frame = new Frame(sprites[i]); 41 | frames.Add(frame); 42 | } 43 | AnimationExpress animClip = new AnimationExpress(frames); 44 | 45 | AssetDatabase.CreateAsset(animClip, newAssetName); 46 | AssetDatabase.SaveAssets(); 47 | AssetDatabase.Refresh(); 48 | } 49 | 50 | [MenuItem("CONTEXT/TextureImporter/Update Sprite Name", priority = 999)] 51 | private static void UpdateSpriteName(MenuCommand command) 52 | { 53 | TextureImporter textureImporter = (TextureImporter)command.context; 54 | string path = AssetDatabase.GetAssetPath(textureImporter); 55 | string fileName = Path.GetFileName(path).Replace(".png", ""); 56 | 57 | SpriteMetaData[] spritesheet = textureImporter.spritesheet; 58 | for (int i = 0; i < spritesheet.Length; i++) 59 | { 60 | if (i < 10) 61 | { 62 | spritesheet[i].name = $"{fileName}_00{i}"; 63 | } 64 | else if (i < 100) 65 | { 66 | spritesheet[i].name = $"{fileName}_0{i}"; 67 | } 68 | else 69 | { 70 | spritesheet[i].name = $"{fileName}_{i}"; 71 | } 72 | } 73 | textureImporter.spritesheet = spritesheet; 74 | 75 | EditorUtility.SetDirty(textureImporter); 76 | AssetDatabase.Refresh(); 77 | AssetDatabase.SaveAssets(); 78 | textureImporter.SaveAndReimport(); 79 | } 80 | } 81 | } -------------------------------------------------------------------------------- /Editor/AnimationExpressCreatorTool.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 31f3308331b61a24787ef7ea95322c74 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/AnimationExpressCustomEditor.cs: -------------------------------------------------------------------------------- 1 | using AnimExpress; 2 | using UnityEditor; 3 | using UnityEngine; 4 | 5 | namespace AnimExpressEditor 6 | { 7 | [CustomEditor(typeof(AnimationExpress))] 8 | public class AnimationExpressCustomEditor : Editor 9 | { 10 | private AnimationExpress context; 11 | 12 | public void OnEnable() 13 | { 14 | context = (AnimationExpress)target; 15 | } 16 | 17 | public override void OnInspectorGUI() 18 | { 19 | serializedObject.Update(); 20 | 21 | SerializedProperty isLooping = serializedObject.FindProperty("isLooping"); 22 | EditorGUILayout.PropertyField(isLooping); 23 | if (!isLooping.boolValue) 24 | { 25 | SerializedProperty onCompletionOption = serializedObject.FindProperty("onCompletionOption"); 26 | EditorGUILayout.PropertyField(onCompletionOption); 27 | 28 | var option = (AnimationExpressCompletionOptions)onCompletionOption.enumValueIndex; 29 | if (option == AnimationExpressCompletionOptions.BroadcastMessage) 30 | { 31 | EditorGUILayout.PropertyField(serializedObject.FindProperty("methodName")); 32 | } 33 | } 34 | EditorGUILayout.PropertyField(serializedObject.FindProperty("canBeRestarted")); 35 | 36 | EditorGUILayout.Space(16f); 37 | 38 | EditorGUILayout.LabelField($"Total Duration: {context.TotalDuration.ToString("0.00")}s", EditorStyles.boldLabel); 39 | SerializedProperty speedFactor = serializedObject.FindProperty("speedFactor"); 40 | EditorGUILayout.PropertyField(speedFactor); 41 | if (speedFactor.floatValue == 0f) 42 | { 43 | speedFactor.floatValue = 1f; 44 | } 45 | else 46 | { 47 | speedFactor.floatValue = Mathf.Max(speedFactor.floatValue, 0.01f); 48 | } 49 | EditorGUILayout.PropertyField(serializedObject.FindProperty("frames")); 50 | 51 | serializedObject.ApplyModifiedProperties(); 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /Editor/AnimationExpressCustomEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 06fa42a1796b8af46b641701a9e86daf 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/AnimationExpressEditorUtils.cs: -------------------------------------------------------------------------------- 1 | namespace AnimExpressEditor 2 | { 3 | /// 4 | /// Class which contains shared information across editor classes. 5 | /// 6 | public static class AnimationExpressEditorUtils 7 | { 8 | public const float COPY_BUTTON_WIDTH = 30f; 9 | } 10 | } -------------------------------------------------------------------------------- /Editor/AnimationExpressEditorUtils.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c798291c80734304599c9ef131145366 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/AnimationExpressPropertyDrawer.cs: -------------------------------------------------------------------------------- 1 | using AnimExpress; 2 | using System; 3 | using UnityEditor; 4 | using UnityEditor.AnimatedValues; 5 | using UnityEngine; 6 | 7 | namespace AnimExpressEditor 8 | { 9 | [CustomPropertyDrawer(typeof(AnimationExpress))] 10 | public class AnimationExpressPropertyDrawer : PropertyDrawer 11 | { 12 | private static string currrentAnimationPLaying; 13 | 14 | private AnimFloat progress; 15 | private float startTime; 16 | private float endTime; 17 | private bool initizalized; 18 | 19 | public override float GetPropertyHeight(SerializedProperty property, GUIContent label) 20 | { 21 | return EditorGUIUtility.singleLineHeight; 22 | } 23 | 24 | public void RepaintInspector(SerializedObject BaseObject) 25 | { 26 | foreach (var item in ActiveEditorTracker.sharedTracker.activeEditors) 27 | if (item.serializedObject == BaseObject) 28 | { item.Repaint(); return; } 29 | } 30 | 31 | public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) 32 | { 33 | if (progress == null) 34 | { 35 | progress = new AnimFloat(0f); 36 | progress.valueChanged.AddListener(() => RepaintInspector(property.serializedObject)); 37 | } 38 | 39 | AnimatorExpress animator = (AnimatorExpress)property.serializedObject.targetObject; 40 | AnimationExpress playingAnimation = animator.Current; 41 | 42 | int index = Convert.ToInt32(property.displayName.Replace("Element ", "")); 43 | AnimationExpress animation = animator.Animations[index]; 44 | 45 | // Check if this animation is playing 46 | if (animation != null && animation == playingAnimation) 47 | { 48 | if (!initizalized || progress.value == 1f) 49 | { 50 | if (!initizalized) initizalized = true; 51 | 52 | startTime = Time.time; 53 | endTime = animation.TotalDuration; 54 | } 55 | 56 | progress.value = Mathf.Clamp01((Time.time - startTime) / endTime); 57 | } 58 | else 59 | { 60 | if (initizalized) initizalized = false; 61 | progress.value = 0f; 62 | } 63 | 64 | Rect animationRect = position; 65 | animationRect.width = position.width - 2 * AnimationExpressEditorUtils.COPY_BUTTON_WIDTH; 66 | 67 | Rect animationProgressRect = position; 68 | animationProgressRect.width = animationRect.width * progress.value; 69 | 70 | Rect playButtonRect = position; 71 | playButtonRect.width = AnimationExpressEditorUtils.COPY_BUTTON_WIDTH; 72 | playButtonRect.x += animationRect.width; 73 | 74 | Rect copyButtonRect = position; 75 | copyButtonRect.width = AnimationExpressEditorUtils.COPY_BUTTON_WIDTH; 76 | copyButtonRect.x += animationRect.width + AnimationExpressEditorUtils.COPY_BUTTON_WIDTH; 77 | 78 | EditorGUI.PropertyField(animationRect, property, GUIContent.none); 79 | 80 | Color progressColor = new Color(0f, 1f, 1f, 0.2f); 81 | EditorGUI.DrawRect(animationProgressRect, progressColor); 82 | 83 | // Checking if we have cached testing info after testing is completed 84 | if (!animator.IsBeingTested && !string.IsNullOrEmpty(currrentAnimationPLaying)) 85 | { 86 | currrentAnimationPLaying = ""; 87 | } 88 | 89 | EditorGUI.BeginDisabledGroup(!Application.isPlaying); 90 | if (animation != null && animation.name == currrentAnimationPLaying) 91 | { 92 | if (GUI.Button(playButtonRect, EditorGUIUtility.IconContent("d_PauseButton@2x"))) 93 | { 94 | animator.IsBeingTested = false; 95 | currrentAnimationPLaying = ""; 96 | } 97 | } 98 | else 99 | { 100 | if (GUI.Button(playButtonRect, EditorGUIUtility.IconContent("d_PlayButton@2x"))) 101 | { 102 | if (animation != null) 103 | { 104 | animator.PlayTesting(animation.name); 105 | currrentAnimationPLaying = animation.name; 106 | } 107 | } 108 | } 109 | EditorGUI.EndDisabledGroup(); 110 | 111 | if (GUI.Button(copyButtonRect, EditorGUIUtility.IconContent("Clipboard"))) 112 | { 113 | GUIUtility.systemCopyBuffer = $"\"{property.objectReferenceValue.name}\""; 114 | } 115 | } 116 | } 117 | } -------------------------------------------------------------------------------- /Editor/AnimationExpressPropertyDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 84cc6c86c00fb1f41909ed03f861b492 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/FramePropertyDrawer.cs: -------------------------------------------------------------------------------- 1 | using AnimExpress; 2 | using UnityEditor; 3 | using UnityEngine; 4 | 5 | namespace AnimExpressEditor 6 | { 7 | [CustomPropertyDrawer(typeof(Frame))] 8 | public class FramePropertyDrawer : PropertyDrawer 9 | { 10 | private const float DURATION_FIELD_WIDTH = 40f; 11 | private const float TEXTURE_FIELD_WIDTH = 60f; 12 | 13 | public override float GetPropertyHeight(SerializedProperty property, GUIContent label) 14 | { 15 | return EditorGUIUtility.singleLineHeight; 16 | } 17 | 18 | public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) 19 | { 20 | var sprite = property.FindPropertyRelative("sprite"); 21 | var duration = property.FindPropertyRelative("duration"); 22 | 23 | Rect spriteRect = position; 24 | spriteRect.width = position.width - TEXTURE_FIELD_WIDTH - AnimationExpressEditorUtils.COPY_BUTTON_WIDTH - DURATION_FIELD_WIDTH; 25 | 26 | Rect textureRect = position; 27 | textureRect.width = TEXTURE_FIELD_WIDTH; 28 | textureRect.x += spriteRect.width; 29 | 30 | Rect copyButtonRect = position; 31 | copyButtonRect.width = AnimationExpressEditorUtils.COPY_BUTTON_WIDTH; 32 | copyButtonRect.x += spriteRect.width + TEXTURE_FIELD_WIDTH; 33 | 34 | Rect durationRect = position; 35 | durationRect.width = DURATION_FIELD_WIDTH; 36 | durationRect.x += spriteRect.width + TEXTURE_FIELD_WIDTH + AnimationExpressEditorUtils.COPY_BUTTON_WIDTH; 37 | 38 | EditorGUI.PropertyField(spriteRect, sprite, GUIContent.none); 39 | 40 | if (sprite.objectReferenceValue) 41 | { 42 | Texture texture = AssetPreview.GetAssetPreview(sprite.objectReferenceValue); 43 | if (texture) 44 | { 45 | GUI.DrawTexture(textureRect, texture, ScaleMode.ScaleToFit); 46 | } 47 | } 48 | 49 | if (GUI.Button(copyButtonRect, EditorGUIUtility.IconContent("Clipboard"))) 50 | { 51 | GUIUtility.systemCopyBuffer = $"\"{sprite.objectReferenceValue.name}\""; 52 | } 53 | 54 | EditorGUI.PropertyField(durationRect, duration, GUIContent.none); 55 | } 56 | } 57 | } -------------------------------------------------------------------------------- /Editor/FramePropertyDrawer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1976fb5ef70ace04ea93d571cf4ffbe8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Editor/Icons.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c834ab6979fc483499d5ba1c2fbf4486 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Editor/Icons/AnimationExpressIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Editor/Icons/AnimationExpressIcon.png -------------------------------------------------------------------------------- /Editor/Icons/AnimationExpressIcon.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 786962a2a886e514f933140f6b532752 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 0 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 128 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: [] 119 | outline: [] 120 | physicsShape: [] 121 | bones: [] 122 | spriteID: 5e97eb03825dee720800000000000000 123 | internalID: 0 124 | vertices: [] 125 | indices: 126 | edges: [] 127 | weights: [] 128 | secondaryTextures: [] 129 | nameFileIdTable: {} 130 | spritePackingTag: 131 | pSDRemoveMatte: 0 132 | pSDShowRemoveMatteOption: 0 133 | userData: 134 | assetBundleName: 135 | assetBundleVariant: 136 | -------------------------------------------------------------------------------- /Editor/Icons/AnimatorExpressIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Editor/Icons/AnimatorExpressIcon.png -------------------------------------------------------------------------------- /Editor/Icons/AnimatorExpressIcon.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a17be3efcaf712e4fbe8e30b81762980 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 0 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 1 46 | spriteExtrude: 1 47 | spriteMeshType: 1 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 100 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 1 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: -1 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: [] 119 | outline: [] 120 | physicsShape: [] 121 | bones: [] 122 | spriteID: 5e97eb03825dee720800000000000000 123 | internalID: 0 124 | vertices: [] 125 | indices: 126 | edges: [] 127 | weights: [] 128 | secondaryTextures: [] 129 | nameFileIdTable: {} 130 | spritePackingTag: 131 | pSDRemoveMatte: 0 132 | pSDShowRemoveMatteOption: 0 133 | userData: 134 | assetBundleName: 135 | assetBundleVariant: 136 | -------------------------------------------------------------------------------- /Examples.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d47df5a42070e4e4e8e737873a60fc8a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9c492aca593b58344ba931450a223bd5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/Player.aseprite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Examples/CharacterAnimExpress/Player.aseprite -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/Player.aseprite.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 638a1f5b9e5b840499edb6b4d9228452 3 | ScriptedImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 2 7 | userData: 8 | assetBundleName: 9 | assetBundleVariant: 10 | script: {fileID: 11500000, guid: 62a9f0aa5b59740cfbadc7e5f9823bb0, type: 3} 11 | textureImporterSettings: 12 | alphaSource: 1 13 | mipMapMode: 0 14 | enableMipMap: 0 15 | fadeOut: 0 16 | borderMipMap: 0 17 | mipMapsPreserveCoverage: 0 18 | alphaTestReferenceValue: 0.5 19 | mipMapFadeDistanceStart: 1 20 | mipMapFadeDistanceEnd: 3 21 | convertToNormalMap: 0 22 | heightScale: 0.25 23 | normalMapFilter: 0 24 | isReadable: 0 25 | streamingMipmaps: 0 26 | streamingMipmapsPriority: 0 27 | vTOnly: 0 28 | ignoreMasterTextureLimit: 0 29 | nPOTScale: 1 30 | sRGBTexture: 1 31 | spriteMode: 2 32 | spriteExtrude: 1 33 | spriteMeshType: 1 34 | alignment: 0 35 | spritePivot: {x: 0.5, y: 0.5} 36 | spritePixelsToUnits: 100 37 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 38 | spriteGenerateFallbackPhysicsShape: 0 39 | generateCubemap: 6 40 | cubemapConvolution: 0 41 | seamlessCubemap: 0 42 | alphaIsTransparency: 1 43 | spriteTessellationDetail: -1 44 | textureType: 8 45 | textureShape: 1 46 | singleChannelComponent: 0 47 | flipbookRows: 0 48 | flipbookColumns: 0 49 | ignorePngGamma: 0 50 | cookieMode: 0 51 | filterMode: 0 52 | aniso: 1 53 | mipBias: 0 54 | wrapU: 1 55 | wrapV: 1 56 | wrapW: 1 57 | normalMap: 0 58 | textureFormat: 0 59 | maxTextureSize: 0 60 | lightmap: 0 61 | compressionQuality: 0 62 | linearTexture: 0 63 | grayScaleToAlpha: 0 64 | rGBM: 0 65 | cubemapConvolutionSteps: 0 66 | cubemapConvolutionExponent: 0 67 | maxTextureSizeSet: 0 68 | compressionQualitySet: 0 69 | textureFormatSet: 0 70 | applyGammaDecoding: 0 71 | previousAsepriteImporterSettings: 72 | fileImportMode: 1 73 | importHiddenLayers: 0 74 | layerImportMode: 1 75 | defaultPivotSpace: 0 76 | defaultPivotAlignment: 7 77 | customPivotPosition: {x: 0.5, y: 0.5} 78 | mosaicPadding: 4 79 | spritePadding: 0 80 | generateModelPrefab: 1 81 | generateAnimationClips: 1 82 | addSortingGroup: 1 83 | addShadowCasters: 0 84 | asepriteImporterSettings: 85 | fileImportMode: 1 86 | importHiddenLayers: 0 87 | layerImportMode: 1 88 | defaultPivotSpace: 0 89 | defaultPivotAlignment: 7 90 | customPivotPosition: {x: 0.5, y: 0.5} 91 | mosaicPadding: 4 92 | spritePadding: 0 93 | generateModelPrefab: 1 94 | generateAnimationClips: 1 95 | addSortingGroup: 1 96 | addShadowCasters: 0 97 | importFileNodeState: 1 98 | platformSettingsDirtyTick: 0 99 | textureAssetName: 100 | singleSpriteImportData: 101 | - name: 102 | originalName: 103 | pivot: {x: 0, y: 0} 104 | alignment: 0 105 | border: {x: 0, y: 0, z: 0, w: 0} 106 | rect: 107 | serializedVersion: 2 108 | x: 0 109 | y: 0 110 | width: 0 111 | height: 0 112 | spriteID: 113 | spriteBone: [] 114 | spriteOutline: [] 115 | vertices: [] 116 | spritePhysicsOutline: [] 117 | indices: 118 | edges: [] 119 | tessellationDetail: 0 120 | uvTransform: {x: 0, y: 0} 121 | animatedSpriteImportData: 122 | - name: Player_Frame_0 123 | originalName: 124 | pivot: {x: 1.0769231, y: 0} 125 | alignment: 9 126 | border: {x: 0, y: 0, z: 0, w: 0} 127 | rect: 128 | serializedVersion: 2 129 | x: 41 130 | y: 4 131 | width: 13 132 | height: 15 133 | spriteID: 2b49a26da17343544a52a9f4d7edd443 134 | spriteBone: [] 135 | spriteOutline: [] 136 | vertices: [] 137 | spritePhysicsOutline: [] 138 | indices: 139 | edges: [] 140 | tessellationDetail: 0 141 | uvTransform: {x: 41, y: 4} 142 | - name: Player_Frame_1 143 | originalName: 144 | pivot: {x: 1.0769231, y: 0} 145 | alignment: 9 146 | border: {x: 0, y: 0, z: 0, w: 0} 147 | rect: 148 | serializedVersion: 2 149 | x: 41 150 | y: 96 151 | width: 13 152 | height: 14 153 | spriteID: 02e1813415d29d6419d30e214d8f6c25 154 | spriteBone: [] 155 | spriteOutline: [] 156 | vertices: [] 157 | spritePhysicsOutline: [] 158 | indices: 159 | edges: [] 160 | tessellationDetail: 0 161 | uvTransform: {x: 41, y: 96} 162 | - name: Player_Frame_2 163 | originalName: 164 | pivot: {x: 1.0769231, y: 0} 165 | alignment: 9 166 | border: {x: 0, y: 0, z: 0, w: 0} 167 | rect: 168 | serializedVersion: 2 169 | x: 41 170 | y: 27 171 | width: 13 172 | height: 15 173 | spriteID: 141fb590d765b614096e565c6b6b2618 174 | spriteBone: [] 175 | spriteOutline: [] 176 | vertices: [] 177 | spritePhysicsOutline: [] 178 | indices: 179 | edges: [] 180 | tessellationDetail: 0 181 | uvTransform: {x: 41, y: 27} 182 | - name: Player_Frame_3 183 | originalName: 184 | pivot: {x: 1.0714287, y: 0} 185 | alignment: 9 186 | border: {x: 0, y: 0, z: 0, w: 0} 187 | rect: 188 | serializedVersion: 2 189 | x: 4 190 | y: 139 191 | width: 14 192 | height: 15 193 | spriteID: f03a1610f106ad04aba9c03bf84b87d1 194 | spriteBone: [] 195 | spriteOutline: [] 196 | vertices: [] 197 | spritePhysicsOutline: [] 198 | indices: 199 | edges: [] 200 | tessellationDetail: 0 201 | uvTransform: {x: 4, y: 139} 202 | - name: Player_Frame_4 203 | originalName: 204 | pivot: {x: 1.0714287, y: 0} 205 | alignment: 9 206 | border: {x: 0, y: 0, z: 0, w: 0} 207 | rect: 208 | serializedVersion: 2 209 | x: 4 210 | y: 162 211 | width: 14 212 | height: 15 213 | spriteID: 9bba5da57ede0a24198c535c4c8b4907 214 | spriteBone: [] 215 | spriteOutline: [] 216 | vertices: [] 217 | spritePhysicsOutline: [] 218 | indices: 219 | edges: [] 220 | tessellationDetail: 0 221 | uvTransform: {x: 4, y: 162} 222 | - name: Player_Frame_5 223 | originalName: 224 | pivot: {x: 1.0769231, y: 0} 225 | alignment: 9 226 | border: {x: 0, y: 0, z: 0, w: 0} 227 | rect: 228 | serializedVersion: 2 229 | x: 41 230 | y: 50 231 | width: 13 232 | height: 15 233 | spriteID: f95b9f60c10bf224b9e0531fcf808d3b 234 | spriteBone: [] 235 | spriteOutline: [] 236 | vertices: [] 237 | spritePhysicsOutline: [] 238 | indices: 239 | edges: [] 240 | tessellationDetail: 0 241 | uvTransform: {x: 41, y: 50} 242 | - name: Player_Frame_6 243 | originalName: 244 | pivot: {x: 1, y: -0.06666667} 245 | alignment: 9 246 | border: {x: 0, y: 0, z: 0, w: 0} 247 | rect: 248 | serializedVersion: 2 249 | x: 4 250 | y: 49 251 | width: 16 252 | height: 15 253 | spriteID: 7e23cdbfe58b6f94797fd673c7596ad0 254 | spriteBone: [] 255 | spriteOutline: [] 256 | vertices: [] 257 | spritePhysicsOutline: [] 258 | indices: 259 | edges: [] 260 | tessellationDetail: 0 261 | uvTransform: {x: 4, y: 49} 262 | - name: Player_Frame_7 263 | originalName: 264 | pivot: {x: 1, y: -0.06666667} 265 | alignment: 9 266 | border: {x: 0, y: 0, z: 0, w: 0} 267 | rect: 268 | serializedVersion: 2 269 | x: 4 270 | y: 72 271 | width: 16 272 | height: 15 273 | spriteID: aac6350c08195424d937e17978734fe1 274 | spriteBone: [] 275 | spriteOutline: [] 276 | vertices: [] 277 | spritePhysicsOutline: [] 278 | indices: 279 | edges: [] 280 | tessellationDetail: 0 281 | uvTransform: {x: 4, y: 72} 282 | - name: Player_Frame_8 283 | originalName: 284 | pivot: {x: 1, y: -0.14285715} 285 | alignment: 9 286 | border: {x: 0, y: 0, z: 0, w: 0} 287 | rect: 288 | serializedVersion: 2 289 | x: 4 290 | y: 95 291 | width: 16 292 | height: 14 293 | spriteID: 0b38790f44074b240815fda9d8f98d35 294 | spriteBone: [] 295 | spriteOutline: [] 296 | vertices: [] 297 | spritePhysicsOutline: [] 298 | indices: 299 | edges: [] 300 | tessellationDetail: 0 301 | uvTransform: {x: 4, y: 95} 302 | - name: Player_Frame_9 303 | originalName: 304 | pivot: {x: 1, y: -0.14285715} 305 | alignment: 9 306 | border: {x: 0, y: 0, z: 0, w: 0} 307 | rect: 308 | serializedVersion: 2 309 | x: 4 310 | y: 117 311 | width: 16 312 | height: 14 313 | spriteID: 120795f9cca74c1419b9ab4b406c5136 314 | spriteBone: [] 315 | spriteOutline: [] 316 | vertices: [] 317 | spritePhysicsOutline: [] 318 | indices: 319 | edges: [] 320 | tessellationDetail: 0 321 | uvTransform: {x: 4, y: 117} 322 | - name: Player_Frame_10 323 | originalName: 324 | pivot: {x: 1.0714287, y: -0.14285715} 325 | alignment: 9 326 | border: {x: 0, y: 0, z: 0, w: 0} 327 | rect: 328 | serializedVersion: 2 329 | x: 4 330 | y: 232 331 | width: 14 332 | height: 14 333 | spriteID: c0303439eb17782448da0018447109de 334 | spriteBone: [] 335 | spriteOutline: [] 336 | vertices: [] 337 | spritePhysicsOutline: [] 338 | indices: 339 | edges: [] 340 | tessellationDetail: 0 341 | uvTransform: {x: 4, y: 232} 342 | - name: Player_Frame_11 343 | originalName: 344 | pivot: {x: 1.0833334, y: 0} 345 | alignment: 9 346 | border: {x: 0, y: 0, z: 0, w: 0} 347 | rect: 348 | serializedVersion: 2 349 | x: 41 350 | y: 140 351 | width: 12 352 | height: 15 353 | spriteID: b93d4b09229e14d4cb1e9aaadf9574e5 354 | spriteBone: [] 355 | spriteOutline: [] 356 | vertices: [] 357 | spritePhysicsOutline: [] 358 | indices: 359 | edges: [] 360 | tessellationDetail: 0 361 | uvTransform: {x: 41, y: 140} 362 | - name: Player_Frame_12 363 | originalName: 364 | pivot: {x: 1.0714287, y: -0.23076925} 365 | alignment: 9 366 | border: {x: 0, y: 0, z: 0, w: 0} 367 | rect: 368 | serializedVersion: 2 369 | x: 62 370 | y: 4 371 | width: 14 372 | height: 13 373 | spriteID: b46707989b3925a4faf50f21371156b2 374 | spriteBone: [] 375 | spriteOutline: [] 376 | vertices: [] 377 | spritePhysicsOutline: [] 378 | indices: 379 | edges: [] 380 | tessellationDetail: 0 381 | uvTransform: {x: 62, y: 4} 382 | - name: Player_Frame_13 383 | originalName: 384 | pivot: {x: 1.0769231, y: 0} 385 | alignment: 9 386 | border: {x: 0, y: 0, z: 0, w: 0} 387 | rect: 388 | serializedVersion: 2 389 | x: 41 390 | y: 73 391 | width: 13 392 | height: 15 393 | spriteID: 4102cddcc65cbb048adb39e5628f278e 394 | spriteBone: [] 395 | spriteOutline: [] 396 | vertices: [] 397 | spritePhysicsOutline: [] 398 | indices: 399 | edges: [] 400 | tessellationDetail: 0 401 | uvTransform: {x: 41, y: 73} 402 | - name: Player_Frame_14 403 | originalName: 404 | pivot: {x: 1.0714287, y: 0} 405 | alignment: 9 406 | border: {x: 0, y: 0, z: 0, w: 0} 407 | rect: 408 | serializedVersion: 2 409 | x: 4 410 | y: 185 411 | width: 14 412 | height: 15 413 | spriteID: 93ef05f9752e9634f97868b795824a4d 414 | spriteBone: [] 415 | spriteOutline: [] 416 | vertices: [] 417 | spritePhysicsOutline: [] 418 | indices: 419 | edges: [] 420 | tessellationDetail: 0 421 | uvTransform: {x: 4, y: 185} 422 | - name: Player_Frame_15 423 | originalName: 424 | pivot: {x: 0.51724136, y: 0} 425 | alignment: 9 426 | border: {x: 0, y: 0, z: 0, w: 0} 427 | rect: 428 | serializedVersion: 2 429 | x: 4 430 | y: 4 431 | width: 29 432 | height: 16 433 | spriteID: 5e5b521eb20e2c44483be4e630f2c0cc 434 | spriteBone: [] 435 | spriteOutline: [] 436 | vertices: [] 437 | spritePhysicsOutline: [] 438 | indices: 439 | edges: [] 440 | tessellationDetail: 0 441 | uvTransform: {x: 4, y: 4} 442 | - name: Player_Frame_16 443 | originalName: 444 | pivot: {x: 0.6086957, y: 0} 445 | alignment: 9 446 | border: {x: 0, y: 0, z: 0, w: 0} 447 | rect: 448 | serializedVersion: 2 449 | x: 4 450 | y: 28 451 | width: 23 452 | height: 13 453 | spriteID: 7f7846b9b954de4408749ead82e82406 454 | spriteBone: [] 455 | spriteOutline: [] 456 | vertices: [] 457 | spritePhysicsOutline: [] 458 | indices: 459 | edges: [] 460 | tessellationDetail: 0 461 | uvTransform: {x: 4, y: 28} 462 | - name: Player_Frame_17 463 | originalName: 464 | pivot: {x: 1.0769231, y: 0} 465 | alignment: 9 466 | border: {x: 0, y: 0, z: 0, w: 0} 467 | rect: 468 | serializedVersion: 2 469 | x: 41 470 | y: 118 471 | width: 13 472 | height: 14 473 | spriteID: cbdbad956036cff4fbe2436f7650abad 474 | spriteBone: [] 475 | spriteOutline: [] 476 | vertices: [] 477 | spritePhysicsOutline: [] 478 | indices: 479 | edges: [] 480 | tessellationDetail: 0 481 | uvTransform: {x: 41, y: 118} 482 | - name: Player_Frame_18 483 | originalName: 484 | pivot: {x: 1.0769231, y: 0} 485 | alignment: 9 486 | border: {x: 0, y: 0, z: 0, w: 0} 487 | rect: 488 | serializedVersion: 2 489 | x: 4 490 | y: 208 491 | width: 13 492 | height: 16 493 | spriteID: 9e6c57cf77af91347bbe9809fc7a2538 494 | spriteBone: [] 495 | spriteOutline: [] 496 | vertices: [] 497 | spritePhysicsOutline: [] 498 | indices: 499 | edges: [] 500 | tessellationDetail: 0 501 | uvTransform: {x: 4, y: 208} 502 | - name: Player_Frame_19 503 | originalName: 504 | pivot: {x: 1.0769231, y: 0} 505 | alignment: 9 506 | border: {x: 0, y: 0, z: 0, w: 0} 507 | rect: 508 | serializedVersion: 2 509 | x: 41 510 | y: 217 511 | width: 13 512 | height: 9 513 | spriteID: ea986cc797e0eff4e9f7f51539e55778 514 | spriteBone: [] 515 | spriteOutline: [] 516 | vertices: [] 517 | spritePhysicsOutline: [] 518 | indices: 519 | edges: [] 520 | tessellationDetail: 0 521 | uvTransform: {x: 41, y: 217} 522 | - name: Player_Frame_20 523 | originalName: 524 | pivot: {x: 1.0769231, y: 0} 525 | alignment: 9 526 | border: {x: 0, y: 0, z: 0, w: 0} 527 | rect: 528 | serializedVersion: 2 529 | x: 41 530 | y: 163 531 | width: 13 532 | height: 10 533 | spriteID: 8a97f0e20eaedab4081b220c8421f5e6 534 | spriteBone: [] 535 | spriteOutline: [] 536 | vertices: [] 537 | spritePhysicsOutline: [] 538 | indices: 539 | edges: [] 540 | tessellationDetail: 0 541 | uvTransform: {x: 41, y: 163} 542 | - name: Player_Frame_21 543 | originalName: 544 | pivot: {x: 1.0769231, y: 0} 545 | alignment: 9 546 | border: {x: 0, y: 0, z: 0, w: 0} 547 | rect: 548 | serializedVersion: 2 549 | x: 41 550 | y: 181 551 | width: 13 552 | height: 10 553 | spriteID: 14993aaf97c3ed84ca4e733a8cda3d6f 554 | spriteBone: [] 555 | spriteOutline: [] 556 | vertices: [] 557 | spritePhysicsOutline: [] 558 | indices: 559 | edges: [] 560 | tessellationDetail: 0 561 | uvTransform: {x: 41, y: 181} 562 | - name: Player_Frame_22 563 | originalName: 564 | pivot: {x: 1.0769231, y: 0} 565 | alignment: 9 566 | border: {x: 0, y: 0, z: 0, w: 0} 567 | rect: 568 | serializedVersion: 2 569 | x: 41 570 | y: 199 571 | width: 13 572 | height: 10 573 | spriteID: 661c6b4ad55f8de4abea0304ffcfaf2c 574 | spriteBone: [] 575 | spriteOutline: [] 576 | vertices: [] 577 | spritePhysicsOutline: [] 578 | indices: 579 | edges: [] 580 | tessellationDetail: 0 581 | uvTransform: {x: 41, y: 199} 582 | - name: Player_Frame_23 583 | originalName: 584 | pivot: {x: 1.0714287, y: 0} 585 | alignment: 9 586 | border: {x: 0, y: 0, z: 0, w: 0} 587 | rect: 588 | serializedVersion: 2 589 | x: 62 590 | y: 85 591 | width: 14 592 | height: 11 593 | spriteID: a286465c2201e59429f18f0cd517cac9 594 | spriteBone: [] 595 | spriteOutline: [] 596 | vertices: [] 597 | spritePhysicsOutline: [] 598 | indices: 599 | edges: [] 600 | tessellationDetail: 0 601 | uvTransform: {x: 62, y: 85} 602 | - name: Player_Frame_24 603 | originalName: 604 | pivot: {x: 1.0714287, y: 0} 605 | alignment: 9 606 | border: {x: 0, y: 0, z: 0, w: 0} 607 | rect: 608 | serializedVersion: 2 609 | x: 62 610 | y: 25 611 | width: 14 612 | height: 12 613 | spriteID: 8c1b711abf01c7d42a51c3d90d9ef16a 614 | spriteBone: [] 615 | spriteOutline: [] 616 | vertices: [] 617 | spritePhysicsOutline: [] 618 | indices: 619 | edges: [] 620 | tessellationDetail: 0 621 | uvTransform: {x: 62, y: 25} 622 | - name: Player_Frame_25 623 | originalName: 624 | pivot: {x: 1.0714287, y: 0} 625 | alignment: 9 626 | border: {x: 0, y: 0, z: 0, w: 0} 627 | rect: 628 | serializedVersion: 2 629 | x: 62 630 | y: 45 631 | width: 14 632 | height: 12 633 | spriteID: eb1d2058af4f69b42bbc5c9b14dc80cc 634 | spriteBone: [] 635 | spriteOutline: [] 636 | vertices: [] 637 | spritePhysicsOutline: [] 638 | indices: 639 | edges: [] 640 | tessellationDetail: 0 641 | uvTransform: {x: 62, y: 45} 642 | - name: Player_Frame_26 643 | originalName: 644 | pivot: {x: 1.0714287, y: 0} 645 | alignment: 9 646 | border: {x: 0, y: 0, z: 0, w: 0} 647 | rect: 648 | serializedVersion: 2 649 | x: 62 650 | y: 65 651 | width: 14 652 | height: 12 653 | spriteID: 79a74f1e2fd5e0548abd90d733d54b06 654 | spriteBone: [] 655 | spriteOutline: [] 656 | vertices: [] 657 | spritePhysicsOutline: [] 658 | indices: 659 | edges: [] 660 | tessellationDetail: 0 661 | uvTransform: {x: 62, y: 65} 662 | - name: Player_Frame_27 663 | originalName: 664 | pivot: {x: 1.0714287, y: 0} 665 | alignment: 9 666 | border: {x: 0, y: 0, z: 0, w: 0} 667 | rect: 668 | serializedVersion: 2 669 | x: 62 670 | y: 104 671 | width: 14 672 | height: 11 673 | spriteID: 48c7d2dd7c3092a488f81c303ada59de 674 | spriteBone: [] 675 | spriteOutline: [] 676 | vertices: [] 677 | spritePhysicsOutline: [] 678 | indices: 679 | edges: [] 680 | tessellationDetail: 0 681 | uvTransform: {x: 62, y: 104} 682 | spriteSheetImportData: [] 683 | asepriteLayers: 684 | - layerIndex: 0 685 | guid: 1687901567 686 | name: Player 687 | layerFlags: 0 688 | layerType: 0 689 | blendMode: 0 690 | cells: 691 | - name: Player_Frame_0 692 | frameIndex: 0 693 | cellRect: 694 | x: 2 695 | y: 0 696 | width: 13 697 | height: 15 698 | spriteId: 2b49a26da17343544a52a9f4d7edd443 699 | - name: Player_Frame_1 700 | frameIndex: 1 701 | cellRect: 702 | x: 2 703 | y: 0 704 | width: 13 705 | height: 14 706 | spriteId: 02e1813415d29d6419d30e214d8f6c25 707 | - name: Player_Frame_2 708 | frameIndex: 2 709 | cellRect: 710 | x: 2 711 | y: 0 712 | width: 13 713 | height: 15 714 | spriteId: 141fb590d765b614096e565c6b6b2618 715 | - name: Player_Frame_3 716 | frameIndex: 3 717 | cellRect: 718 | x: 1 719 | y: 0 720 | width: 14 721 | height: 15 722 | spriteId: f03a1610f106ad04aba9c03bf84b87d1 723 | - name: Player_Frame_4 724 | frameIndex: 4 725 | cellRect: 726 | x: 1 727 | y: 0 728 | width: 14 729 | height: 15 730 | spriteId: 9bba5da57ede0a24198c535c4c8b4907 731 | - name: Player_Frame_5 732 | frameIndex: 5 733 | cellRect: 734 | x: 2 735 | y: 0 736 | width: 13 737 | height: 15 738 | spriteId: f95b9f60c10bf224b9e0531fcf808d3b 739 | - name: Player_Frame_6 740 | frameIndex: 6 741 | cellRect: 742 | x: 0 743 | y: 1 744 | width: 16 745 | height: 15 746 | spriteId: 7e23cdbfe58b6f94797fd673c7596ad0 747 | - name: Player_Frame_7 748 | frameIndex: 7 749 | cellRect: 750 | x: 0 751 | y: 1 752 | width: 16 753 | height: 15 754 | spriteId: aac6350c08195424d937e17978734fe1 755 | - name: Player_Frame_8 756 | frameIndex: 8 757 | cellRect: 758 | x: 0 759 | y: 2 760 | width: 16 761 | height: 14 762 | spriteId: 0b38790f44074b240815fda9d8f98d35 763 | - name: Player_Frame_9 764 | frameIndex: 9 765 | cellRect: 766 | x: 0 767 | y: 2 768 | width: 16 769 | height: 14 770 | spriteId: 120795f9cca74c1419b9ab4b406c5136 771 | - name: Player_Frame_10 772 | frameIndex: 10 773 | cellRect: 774 | x: 1 775 | y: 2 776 | width: 14 777 | height: 14 778 | spriteId: c0303439eb17782448da0018447109de 779 | - name: Player_Frame_11 780 | frameIndex: 11 781 | cellRect: 782 | x: 3 783 | y: 0 784 | width: 12 785 | height: 15 786 | spriteId: b93d4b09229e14d4cb1e9aaadf9574e5 787 | - name: Player_Frame_12 788 | frameIndex: 12 789 | cellRect: 790 | x: 1 791 | y: 3 792 | width: 14 793 | height: 13 794 | spriteId: b46707989b3925a4faf50f21371156b2 795 | - name: Player_Frame_13 796 | frameIndex: 13 797 | cellRect: 798 | x: 2 799 | y: 0 800 | width: 13 801 | height: 15 802 | spriteId: 4102cddcc65cbb048adb39e5628f278e 803 | - name: Player_Frame_14 804 | frameIndex: 14 805 | cellRect: 806 | x: 1 807 | y: 0 808 | width: 14 809 | height: 15 810 | spriteId: 93ef05f9752e9634f97868b795824a4d 811 | - name: Player_Frame_15 812 | frameIndex: 15 813 | cellRect: 814 | x: 1 815 | y: 0 816 | width: 29 817 | height: 16 818 | spriteId: 5e5b521eb20e2c44483be4e630f2c0cc 819 | - name: Player_Frame_16 820 | frameIndex: 16 821 | cellRect: 822 | x: 2 823 | y: 0 824 | width: 23 825 | height: 13 826 | spriteId: 7f7846b9b954de4408749ead82e82406 827 | - name: Player_Frame_17 828 | frameIndex: 17 829 | cellRect: 830 | x: 2 831 | y: 0 832 | width: 13 833 | height: 14 834 | spriteId: cbdbad956036cff4fbe2436f7650abad 835 | - name: Player_Frame_18 836 | frameIndex: 18 837 | cellRect: 838 | x: 2 839 | y: 0 840 | width: 13 841 | height: 16 842 | spriteId: 9e6c57cf77af91347bbe9809fc7a2538 843 | - name: Player_Frame_19 844 | frameIndex: 19 845 | cellRect: 846 | x: 2 847 | y: 0 848 | width: 13 849 | height: 9 850 | spriteId: ea986cc797e0eff4e9f7f51539e55778 851 | - name: Player_Frame_20 852 | frameIndex: 20 853 | cellRect: 854 | x: 2 855 | y: 0 856 | width: 13 857 | height: 10 858 | spriteId: 8a97f0e20eaedab4081b220c8421f5e6 859 | - name: Player_Frame_21 860 | frameIndex: 21 861 | cellRect: 862 | x: 2 863 | y: 0 864 | width: 13 865 | height: 10 866 | spriteId: 14993aaf97c3ed84ca4e733a8cda3d6f 867 | - name: Player_Frame_22 868 | frameIndex: 22 869 | cellRect: 870 | x: 2 871 | y: 0 872 | width: 13 873 | height: 10 874 | spriteId: 661c6b4ad55f8de4abea0304ffcfaf2c 875 | - name: Player_Frame_23 876 | frameIndex: 23 877 | cellRect: 878 | x: 1 879 | y: 0 880 | width: 14 881 | height: 11 882 | spriteId: a286465c2201e59429f18f0cd517cac9 883 | - name: Player_Frame_24 884 | frameIndex: 24 885 | cellRect: 886 | x: 1 887 | y: 0 888 | width: 14 889 | height: 12 890 | spriteId: 8c1b711abf01c7d42a51c3d90d9ef16a 891 | - name: Player_Frame_25 892 | frameIndex: 25 893 | cellRect: 894 | x: 1 895 | y: 0 896 | width: 14 897 | height: 12 898 | spriteId: eb1d2058af4f69b42bbc5c9b14dc80cc 899 | - name: Player_Frame_26 900 | frameIndex: 26 901 | cellRect: 902 | x: 1 903 | y: 0 904 | width: 14 905 | height: 12 906 | spriteId: 79a74f1e2fd5e0548abd90d733d54b06 907 | - name: Player_Frame_27 908 | frameIndex: 27 909 | cellRect: 910 | x: 1 911 | y: 0 912 | width: 14 913 | height: 11 914 | spriteId: 48c7d2dd7c3092a488f81c303ada59de 915 | linkedCells: [] 916 | parentIndex: -1 917 | platformSettings: [] 918 | generatePhysicsShape: 0 919 | secondarySpriteTextures: [] 920 | spritePackingTag: 921 | canvasSize: {x: 32, y: 16} 922 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SampleCharacterAnimExpress.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 3 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 12 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 0 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 0 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_LightingSettings: {fileID: 0} 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | maxJobWorkers: 0 122 | preserveTilesOutsideBounds: 0 123 | debug: 124 | m_Flags: 0 125 | m_NavMeshData: {fileID: 0} 126 | --- !u!1 &587929427 127 | GameObject: 128 | m_ObjectHideFlags: 0 129 | m_CorrespondingSourceObject: {fileID: 0} 130 | m_PrefabInstance: {fileID: 0} 131 | m_PrefabAsset: {fileID: 0} 132 | serializedVersion: 6 133 | m_Component: 134 | - component: {fileID: 587929428} 135 | - component: {fileID: 587929431} 136 | - component: {fileID: 587929429} 137 | - component: {fileID: 587929432} 138 | m_Layer: 0 139 | m_Name: Animation 140 | m_TagString: Untagged 141 | m_Icon: {fileID: 0} 142 | m_NavMeshLayer: 0 143 | m_StaticEditorFlags: 0 144 | m_IsActive: 1 145 | --- !u!4 &587929428 146 | Transform: 147 | m_ObjectHideFlags: 0 148 | m_CorrespondingSourceObject: {fileID: 0} 149 | m_PrefabInstance: {fileID: 0} 150 | m_PrefabAsset: {fileID: 0} 151 | m_GameObject: {fileID: 587929427} 152 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 153 | m_LocalPosition: {x: 0, y: 0, z: 0} 154 | m_LocalScale: {x: 1, y: 1, z: 1} 155 | m_ConstrainProportionsScale: 0 156 | m_Children: [] 157 | m_Father: {fileID: 0} 158 | m_RootOrder: 1 159 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 160 | --- !u!114 &587929429 161 | MonoBehaviour: 162 | m_ObjectHideFlags: 0 163 | m_CorrespondingSourceObject: {fileID: 0} 164 | m_PrefabInstance: {fileID: 0} 165 | m_PrefabAsset: {fileID: 0} 166 | m_GameObject: {fileID: 587929427} 167 | m_Enabled: 1 168 | m_EditorHideFlags: 0 169 | m_Script: {fileID: 11500000, guid: ca1d02e5172e20f418b4817c5dc69cc7, type: 3} 170 | m_Name: 171 | m_EditorClassIdentifier: 172 | animations: 173 | - {fileID: 11400000, guid: f58d4dc4998c777478ac1f698766bd4f, type: 2} 174 | - {fileID: 11400000, guid: c6316d453b3f05b48ae7ae216239487a, type: 2} 175 | - {fileID: 11400000, guid: da8e396caf0da5641bfe5ad38e6588e7, type: 2} 176 | - {fileID: 11400000, guid: 6de30be3fa6a1ff40a96ecc116678fc6, type: 2} 177 | - {fileID: 11400000, guid: 0231c83ef133cc846a21d4c644cbd1fb, type: 2} 178 | spriteRenderer: {fileID: 587929431} 179 | --- !u!212 &587929431 180 | SpriteRenderer: 181 | m_ObjectHideFlags: 0 182 | m_CorrespondingSourceObject: {fileID: 0} 183 | m_PrefabInstance: {fileID: 0} 184 | m_PrefabAsset: {fileID: 0} 185 | m_GameObject: {fileID: 587929427} 186 | m_Enabled: 1 187 | m_CastShadows: 0 188 | m_ReceiveShadows: 0 189 | m_DynamicOccludee: 1 190 | m_StaticShadowCaster: 0 191 | m_MotionVectors: 1 192 | m_LightProbeUsage: 1 193 | m_ReflectionProbeUsage: 1 194 | m_RayTracingMode: 0 195 | m_RayTraceProcedural: 0 196 | m_RenderingLayerMask: 1 197 | m_RendererPriority: 0 198 | m_Materials: 199 | - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} 200 | m_StaticBatchInfo: 201 | firstSubMesh: 0 202 | subMeshCount: 0 203 | m_StaticBatchRoot: {fileID: 0} 204 | m_ProbeAnchor: {fileID: 0} 205 | m_LightProbeVolumeOverride: {fileID: 0} 206 | m_ScaleInLightmap: 1 207 | m_ReceiveGI: 1 208 | m_PreserveUVs: 0 209 | m_IgnoreNormalsForChartDetection: 0 210 | m_ImportantGI: 0 211 | m_StitchLightmapSeams: 1 212 | m_SelectedEditorRenderState: 0 213 | m_MinimumChartSize: 4 214 | m_AutoUVMaxDistance: 0.5 215 | m_AutoUVMaxAngle: 89 216 | m_LightmapParameters: {fileID: 0} 217 | m_SortingLayerID: 0 218 | m_SortingLayer: 0 219 | m_SortingOrder: 0 220 | m_Sprite: {fileID: -733563644, guid: d8f30ac1fc1d7c34883811428222e07e, type: 3} 221 | m_Color: {r: 1, g: 1, b: 1, a: 1} 222 | m_FlipX: 0 223 | m_FlipY: 0 224 | m_DrawMode: 0 225 | m_Size: {x: 2, y: 1} 226 | m_AdaptiveModeThreshold: 0.5 227 | m_SpriteTileMode: 0 228 | m_WasSpriteAssigned: 1 229 | m_MaskInteraction: 0 230 | m_SpriteSortPoint: 0 231 | --- !u!114 &587929432 232 | MonoBehaviour: 233 | m_ObjectHideFlags: 0 234 | m_CorrespondingSourceObject: {fileID: 0} 235 | m_PrefabInstance: {fileID: 0} 236 | m_PrefabAsset: {fileID: 0} 237 | m_GameObject: {fileID: 587929427} 238 | m_Enabled: 1 239 | m_EditorHideFlags: 0 240 | m_Script: {fileID: 11500000, guid: 73a24d3ed76a4b04eb5a8dc70f488145, type: 3} 241 | m_Name: 242 | m_EditorClassIdentifier: 243 | --- !u!1 &1349640530 244 | GameObject: 245 | m_ObjectHideFlags: 0 246 | m_CorrespondingSourceObject: {fileID: 0} 247 | m_PrefabInstance: {fileID: 0} 248 | m_PrefabAsset: {fileID: 0} 249 | serializedVersion: 6 250 | m_Component: 251 | - component: {fileID: 1349640533} 252 | - component: {fileID: 1349640532} 253 | - component: {fileID: 1349640531} 254 | m_Layer: 0 255 | m_Name: Camera 256 | m_TagString: Untagged 257 | m_Icon: {fileID: 0} 258 | m_NavMeshLayer: 0 259 | m_StaticEditorFlags: 0 260 | m_IsActive: 1 261 | --- !u!81 &1349640531 262 | AudioListener: 263 | m_ObjectHideFlags: 0 264 | m_CorrespondingSourceObject: {fileID: 0} 265 | m_PrefabInstance: {fileID: 0} 266 | m_PrefabAsset: {fileID: 0} 267 | m_GameObject: {fileID: 1349640530} 268 | m_Enabled: 1 269 | --- !u!20 &1349640532 270 | Camera: 271 | m_ObjectHideFlags: 0 272 | m_CorrespondingSourceObject: {fileID: 0} 273 | m_PrefabInstance: {fileID: 0} 274 | m_PrefabAsset: {fileID: 0} 275 | m_GameObject: {fileID: 1349640530} 276 | m_Enabled: 1 277 | serializedVersion: 2 278 | m_ClearFlags: 1 279 | m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} 280 | m_projectionMatrixMode: 1 281 | m_GateFitMode: 2 282 | m_FOVAxisMode: 0 283 | m_SensorSize: {x: 36, y: 24} 284 | m_LensShift: {x: 0, y: 0} 285 | m_FocalLength: 50 286 | m_NormalizedViewPortRect: 287 | serializedVersion: 2 288 | x: 0 289 | y: 0 290 | width: 1 291 | height: 1 292 | near clip plane: 0.3 293 | far clip plane: 1000 294 | field of view: 60 295 | orthographic: 0 296 | orthographic size: 5 297 | m_Depth: 0 298 | m_CullingMask: 299 | serializedVersion: 2 300 | m_Bits: 4294967295 301 | m_RenderingPath: -1 302 | m_TargetTexture: {fileID: 0} 303 | m_TargetDisplay: 0 304 | m_TargetEye: 3 305 | m_HDR: 1 306 | m_AllowMSAA: 1 307 | m_AllowDynamicResolution: 0 308 | m_ForceIntoRT: 0 309 | m_OcclusionCulling: 1 310 | m_StereoConvergence: 10 311 | m_StereoSeparation: 0.022 312 | --- !u!4 &1349640533 313 | Transform: 314 | m_ObjectHideFlags: 0 315 | m_CorrespondingSourceObject: {fileID: 0} 316 | m_PrefabInstance: {fileID: 0} 317 | m_PrefabAsset: {fileID: 0} 318 | m_GameObject: {fileID: 1349640530} 319 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 320 | m_LocalPosition: {x: 0, y: 0, z: -10} 321 | m_LocalScale: {x: 1, y: 1, z: 1} 322 | m_ConstrainProportionsScale: 0 323 | m_Children: [] 324 | m_Father: {fileID: 0} 325 | m_RootOrder: 0 326 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 327 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SampleCharacterAnimExpress.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1da6088ef56549e48b3956e838c384f2 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bd84c33fc95a97c449c714ede821f57f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3c269efb2c763f04d9a6581affd8c9e1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-DeathWater.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: cf71752e22bd0a2478c8074f8452590b, type: 3} 13 | m_Name: Player-DeathWater 14 | m_EditorClassIdentifier: 15 | isLooping: 0 16 | onCompletionOption: 0 17 | speedFactor: 1 18 | frames: 19 | - sprite: {fileID: -1278877302, guid: 87b6622c8541568468da573a728a0518, type: 3} 20 | duration: 0.1 21 | - sprite: {fileID: -796159301, guid: 87b6622c8541568468da573a728a0518, type: 3} 22 | duration: 0.1 23 | - sprite: {fileID: 1460344754, guid: 87b6622c8541568468da573a728a0518, type: 3} 24 | duration: 0.1 25 | - sprite: {fileID: 1968147782, guid: 87b6622c8541568468da573a728a0518, type: 3} 26 | duration: 0.1 27 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-DeathWater.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c6316d453b3f05b48ae7ae216239487a 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-Idle.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: cf71752e22bd0a2478c8074f8452590b, type: 3} 13 | m_Name: Player-Idle 14 | m_EditorClassIdentifier: 15 | isLooping: 1 16 | canBeRestarted: 1 17 | onCompletionOption: 0 18 | speedFactor: 1 19 | frames: 20 | - sprite: {fileID: -733563644, guid: d8f30ac1fc1d7c34883811428222e07e, type: 3} 21 | duration: 0.1 22 | - sprite: {fileID: -1185768714, guid: d8f30ac1fc1d7c34883811428222e07e, type: 3} 23 | duration: 0.1 24 | - sprite: {fileID: 1922097022, guid: d8f30ac1fc1d7c34883811428222e07e, type: 3} 25 | duration: 0.1 26 | - sprite: {fileID: 782594876, guid: d8f30ac1fc1d7c34883811428222e07e, type: 3} 27 | duration: 0.1 28 | - sprite: {fileID: -2013046788, guid: d8f30ac1fc1d7c34883811428222e07e, type: 3} 29 | duration: 0.1 30 | - sprite: {fileID: -372801561, guid: d8f30ac1fc1d7c34883811428222e07e, type: 3} 31 | duration: 0.1 32 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-Idle.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f58d4dc4998c777478ac1f698766bd4f 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-Jump.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: cf71752e22bd0a2478c8074f8452590b, type: 3} 13 | m_Name: Player-Jump 14 | m_EditorClassIdentifier: 15 | isLooping: 1 16 | playDefaultOnCompletion: 1 17 | speedFactor: 1 18 | frames: 19 | - sprite: {fileID: -1993947417, guid: 04740e31d5df24e4da66552d916cc274, type: 3} 20 | duration: 0.1 21 | - sprite: {fileID: -394513600, guid: 04740e31d5df24e4da66552d916cc274, type: 3} 22 | duration: 0.1 23 | - sprite: {fileID: -1177148840, guid: 04740e31d5df24e4da66552d916cc274, type: 3} 24 | duration: 0.1 25 | - sprite: {fileID: 329034067, guid: 04740e31d5df24e4da66552d916cc274, type: 3} 26 | duration: 0.1 27 | events: [] 28 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-Jump.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: da8e396caf0da5641bfe5ad38e6588e7 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-Praying.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: cf71752e22bd0a2478c8074f8452590b, type: 3} 13 | m_Name: Player-Praying 14 | m_EditorClassIdentifier: 15 | isLooping: 1 16 | playDefaultOnCompletion: 1 17 | speedFactor: 1 18 | frames: 19 | - sprite: {fileID: 166234848, guid: 1cb92650f540f1d42aa51450cc494a02, type: 3} 20 | duration: 0.1 21 | - sprite: {fileID: 1117728723, guid: 1cb92650f540f1d42aa51450cc494a02, type: 3} 22 | duration: 0.1 23 | - sprite: {fileID: -888250697, guid: 1cb92650f540f1d42aa51450cc494a02, type: 3} 24 | duration: 0.1 25 | - sprite: {fileID: 1764596417, guid: 1cb92650f540f1d42aa51450cc494a02, type: 3} 26 | duration: 0.1 27 | - sprite: {fileID: 444274061, guid: 1cb92650f540f1d42aa51450cc494a02, type: 3} 28 | duration: 0.1 29 | events: [] 30 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-Praying.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6de30be3fa6a1ff40a96ecc116678fc6 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-Walk.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: cf71752e22bd0a2478c8074f8452590b, type: 3} 13 | m_Name: Player-Walk 14 | m_EditorClassIdentifier: 15 | isLooping: 1 16 | onCompletionOption: 0 17 | speedFactor: 1 18 | frames: 19 | - sprite: {fileID: 225568851, guid: 97d9c0de48590874caee342684467019, type: 3} 20 | duration: 0.1 21 | - sprite: {fileID: -632438560, guid: 97d9c0de48590874caee342684467019, type: 3} 22 | duration: 0.1 23 | - sprite: {fileID: 888887601, guid: 97d9c0de48590874caee342684467019, type: 3} 24 | duration: 0.1 25 | - sprite: {fileID: 481146413, guid: 97d9c0de48590874caee342684467019, type: 3} 26 | duration: 0.1 27 | events: [] 28 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Animations/Player-Walk.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0231c83ef133cc846a21d4c644cbd1fb 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 11400000 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-DeathWater.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Examples/CharacterAnimExpress/SpriteSheets/Player-DeathWater.png -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-DeathWater.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 87b6622c8541568468da573a728a0518 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 0 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 2 46 | spriteExtrude: 1 47 | spriteMeshType: 0 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 16 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 0 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: 4 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: 119 | - serializedVersion: 2 120 | name: Player-DeathWater_0 121 | rect: 122 | serializedVersion: 2 123 | x: 0 124 | y: 0 125 | width: 32 126 | height: 16 127 | alignment: 0 128 | pivot: {x: 0, y: 0} 129 | border: {x: 0, y: 0, z: 0, w: 0} 130 | outline: [] 131 | physicsShape: [] 132 | tessellationDetail: -1 133 | bones: [] 134 | spriteID: a81e5c3bffffffff0800000000000000 135 | internalID: -1278877302 136 | vertices: [] 137 | indices: 138 | edges: [] 139 | weights: [] 140 | - serializedVersion: 2 141 | name: Player-DeathWater_1 142 | rect: 143 | serializedVersion: 2 144 | x: 32 145 | y: 0 146 | width: 32 147 | height: 16 148 | alignment: 0 149 | pivot: {x: 0, y: 0} 150 | border: {x: 0, y: 0, z: 0, w: 0} 151 | outline: [] 152 | physicsShape: [] 153 | tessellationDetail: -1 154 | bones: [] 155 | spriteID: bb29b80dffffffff0800000000000000 156 | internalID: -796159301 157 | vertices: [] 158 | indices: 159 | edges: [] 160 | weights: [] 161 | - serializedVersion: 2 162 | name: Player-DeathWater_2 163 | rect: 164 | serializedVersion: 2 165 | x: 64 166 | y: 0 167 | width: 32 168 | height: 16 169 | alignment: 0 170 | pivot: {x: 0, y: 0} 171 | border: {x: 0, y: 0, z: 0, w: 0} 172 | outline: [] 173 | physicsShape: [] 174 | tessellationDetail: -1 175 | bones: [] 176 | spriteID: 2b71b075000000000800000000000000 177 | internalID: 1460344754 178 | vertices: [] 179 | indices: 180 | edges: [] 181 | weights: [] 182 | - serializedVersion: 2 183 | name: Player-DeathWater_3 184 | rect: 185 | serializedVersion: 2 186 | x: 96 187 | y: 0 188 | width: 32 189 | height: 16 190 | alignment: 0 191 | pivot: {x: 0, y: 0} 192 | border: {x: 0, y: 0, z: 0, w: 0} 193 | outline: [] 194 | physicsShape: [] 195 | tessellationDetail: -1 196 | bones: [] 197 | spriteID: 64d8f457000000000800000000000000 198 | internalID: 1968147782 199 | vertices: [] 200 | indices: 201 | edges: [] 202 | weights: [] 203 | outline: [] 204 | physicsShape: [] 205 | bones: [] 206 | spriteID: 5e97eb03825dee720800000000000000 207 | internalID: 0 208 | vertices: [] 209 | indices: 210 | edges: [] 211 | weights: [] 212 | secondaryTextures: [] 213 | nameFileIdTable: 214 | Player-DeathWater_1: -796159301 215 | Player-DeathWater_0: -1278877302 216 | Player-DeathWater_2: 1460344754 217 | Player-DeathWater_3: 1968147782 218 | spritePackingTag: 219 | pSDRemoveMatte: 0 220 | pSDShowRemoveMatteOption: 0 221 | userData: 222 | assetBundleName: 223 | assetBundleVariant: 224 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-Idle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Examples/CharacterAnimExpress/SpriteSheets/Player-Idle.png -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-Idle.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d8f30ac1fc1d7c34883811428222e07e 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 0 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 2 46 | spriteExtrude: 1 47 | spriteMeshType: 0 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 16 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 0 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: 4 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: 119 | - serializedVersion: 2 120 | name: Player-Idle_0 121 | rect: 122 | serializedVersion: 2 123 | x: 0 124 | y: 0 125 | width: 32 126 | height: 16 127 | alignment: 0 128 | pivot: {x: 0, y: 0} 129 | border: {x: 0, y: 0, z: 0, w: 0} 130 | outline: [] 131 | physicsShape: [] 132 | tessellationDetail: -1 133 | bones: [] 134 | spriteID: 405b644dffffffff0800000000000000 135 | internalID: -733563644 136 | vertices: [] 137 | indices: 138 | edges: [] 139 | weights: [] 140 | - serializedVersion: 2 141 | name: Player-Idle_1 142 | rect: 143 | serializedVersion: 2 144 | x: 32 145 | y: 0 146 | width: 32 147 | height: 16 148 | alignment: 0 149 | pivot: {x: 0, y: 0} 150 | border: {x: 0, y: 0, z: 0, w: 0} 151 | outline: [] 152 | physicsShape: [] 153 | tessellationDetail: -1 154 | bones: [] 155 | spriteID: 6fa9259bffffffff0800000000000000 156 | internalID: -1185768714 157 | vertices: [] 158 | indices: 159 | edges: [] 160 | weights: [] 161 | - serializedVersion: 2 162 | name: Player-Idle_2 163 | rect: 164 | serializedVersion: 2 165 | x: 64 166 | y: 0 167 | width: 32 168 | height: 16 169 | alignment: 0 170 | pivot: {x: 0, y: 0} 171 | border: {x: 0, y: 0, z: 0, w: 0} 172 | outline: [] 173 | physicsShape: [] 174 | tessellationDetail: -1 175 | bones: [] 176 | spriteID: e7fd0927000000000800000000000000 177 | internalID: 1922097022 178 | vertices: [] 179 | indices: 180 | edges: [] 181 | weights: [] 182 | - serializedVersion: 2 183 | name: Player-Idle_3 184 | rect: 185 | serializedVersion: 2 186 | x: 96 187 | y: 0 188 | width: 32 189 | height: 16 190 | alignment: 0 191 | pivot: {x: 0, y: 0} 192 | border: {x: 0, y: 0, z: 0, w: 0} 193 | outline: [] 194 | physicsShape: [] 195 | tessellationDetail: -1 196 | bones: [] 197 | spriteID: c3375ae2000000000800000000000000 198 | internalID: 782594876 199 | vertices: [] 200 | indices: 201 | edges: [] 202 | weights: [] 203 | - serializedVersion: 2 204 | name: Player-Idle_4 205 | rect: 206 | serializedVersion: 2 207 | x: 128 208 | y: 0 209 | width: 32 210 | height: 16 211 | alignment: 0 212 | pivot: {x: 0, y: 0} 213 | border: {x: 0, y: 0, z: 0, w: 0} 214 | outline: [] 215 | physicsShape: [] 216 | tessellationDetail: -1 217 | bones: [] 218 | spriteID: cf753088ffffffff0800000000000000 219 | internalID: -2013046788 220 | vertices: [] 221 | indices: 222 | edges: [] 223 | weights: [] 224 | - serializedVersion: 2 225 | name: Player-Idle_5 226 | rect: 227 | serializedVersion: 2 228 | x: 160 229 | y: 0 230 | width: 32 231 | height: 16 232 | alignment: 0 233 | pivot: {x: 0, y: 0} 234 | border: {x: 0, y: 0, z: 0, w: 0} 235 | outline: [] 236 | physicsShape: [] 237 | tessellationDetail: -1 238 | bones: [] 239 | spriteID: 7ef77c9effffffff0800000000000000 240 | internalID: -372801561 241 | vertices: [] 242 | indices: 243 | edges: [] 244 | weights: [] 245 | outline: [] 246 | physicsShape: [] 247 | bones: [] 248 | spriteID: 5e97eb03825dee720800000000000000 249 | internalID: 0 250 | vertices: [] 251 | indices: 252 | edges: [] 253 | weights: [] 254 | secondaryTextures: [] 255 | nameFileIdTable: 256 | Player-Idle_4: -2013046788 257 | Player-Idle_2: 1922097022 258 | Player-Idle_3: 782594876 259 | Player-Idle_0: -733563644 260 | Player-Idle_5: -372801561 261 | Player-Idle_1: -1185768714 262 | spritePackingTag: 263 | pSDRemoveMatte: 0 264 | pSDShowRemoveMatteOption: 0 265 | userData: 266 | assetBundleName: 267 | assetBundleVariant: 268 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-Jump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Examples/CharacterAnimExpress/SpriteSheets/Player-Jump.png -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-Jump.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 04740e31d5df24e4da66552d916cc274 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 0 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 2 46 | spriteExtrude: 1 47 | spriteMeshType: 0 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 16 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 0 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: 4 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: 119 | - serializedVersion: 2 120 | name: Player-Jump_0 121 | rect: 122 | serializedVersion: 2 123 | x: 0 124 | y: 0 125 | width: 32 126 | height: 16 127 | alignment: 0 128 | pivot: {x: 0, y: 0} 129 | border: {x: 0, y: 0, z: 0, w: 0} 130 | outline: [] 131 | physicsShape: [] 132 | tessellationDetail: -1 133 | bones: [] 134 | spriteID: 7e6c6298ffffffff0800000000000000 135 | internalID: -1993947417 136 | vertices: [] 137 | indices: 138 | edges: [] 139 | weights: [] 140 | - serializedVersion: 2 141 | name: Player-Jump_1 142 | rect: 143 | serializedVersion: 2 144 | x: 32 145 | y: 0 146 | width: 32 147 | height: 16 148 | alignment: 0 149 | pivot: {x: 0, y: 0} 150 | border: {x: 0, y: 0, z: 0, w: 0} 151 | outline: [] 152 | physicsShape: [] 153 | tessellationDetail: -1 154 | bones: [] 155 | spriteID: 0433c78effffffff0800000000000000 156 | internalID: -394513600 157 | vertices: [] 158 | indices: 159 | edges: [] 160 | weights: [] 161 | - serializedVersion: 2 162 | name: Player-Jump_2 163 | rect: 164 | serializedVersion: 2 165 | x: 64 166 | y: 0 167 | width: 32 168 | height: 16 169 | alignment: 0 170 | pivot: {x: 0, y: 0} 171 | border: {x: 0, y: 0, z: 0, w: 0} 172 | outline: [] 173 | physicsShape: [] 174 | tessellationDetail: -1 175 | bones: [] 176 | spriteID: 85226d9bffffffff0800000000000000 177 | internalID: -1177148840 178 | vertices: [] 179 | indices: 180 | edges: [] 181 | weights: [] 182 | - serializedVersion: 2 183 | name: Player-Jump_3 184 | rect: 185 | serializedVersion: 2 186 | x: 96 187 | y: 0 188 | width: 32 189 | height: 16 190 | alignment: 0 191 | pivot: {x: 0, y: 0} 192 | border: {x: 0, y: 0, z: 0, w: 0} 193 | outline: [] 194 | physicsShape: [] 195 | tessellationDetail: -1 196 | bones: [] 197 | spriteID: 359ac931000000000800000000000000 198 | internalID: 329034067 199 | vertices: [] 200 | indices: 201 | edges: [] 202 | weights: [] 203 | outline: [] 204 | physicsShape: [] 205 | bones: [] 206 | spriteID: 5e97eb03825dee720800000000000000 207 | internalID: 0 208 | vertices: [] 209 | indices: 210 | edges: [] 211 | weights: [] 212 | secondaryTextures: [] 213 | nameFileIdTable: 214 | Player-Jump_0: -1993947417 215 | Player-Jump_3: 329034067 216 | Player-Jump_1: -394513600 217 | Player-Jump_2: -1177148840 218 | spritePackingTag: 219 | pSDRemoveMatte: 0 220 | pSDShowRemoveMatteOption: 0 221 | userData: 222 | assetBundleName: 223 | assetBundleVariant: 224 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-Praying.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Examples/CharacterAnimExpress/SpriteSheets/Player-Praying.png -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-Praying.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1cb92650f540f1d42aa51450cc494a02 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 0 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 2 46 | spriteExtrude: 1 47 | spriteMeshType: 0 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 16 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 0 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: 4 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: 119 | - serializedVersion: 2 120 | name: Player-Praying_0 121 | rect: 122 | serializedVersion: 2 123 | x: 0 124 | y: 0 125 | width: 32 126 | height: 16 127 | alignment: 0 128 | pivot: {x: 0, y: 0} 129 | border: {x: 0, y: 0, z: 0, w: 0} 130 | outline: [] 131 | physicsShape: [] 132 | tessellationDetail: -1 133 | bones: [] 134 | spriteID: 0ea88e90000000000800000000000000 135 | internalID: 166234848 136 | vertices: [] 137 | indices: 138 | edges: [] 139 | weights: [] 140 | - serializedVersion: 2 141 | name: Player-Praying_1 142 | rect: 143 | serializedVersion: 2 144 | x: 32 145 | y: 0 146 | width: 32 147 | height: 16 148 | alignment: 0 149 | pivot: {x: 0, y: 0} 150 | border: {x: 0, y: 0, z: 0, w: 0} 151 | outline: [] 152 | physicsShape: [] 153 | tessellationDetail: -1 154 | bones: [] 155 | spriteID: 3df2f924000000000800000000000000 156 | internalID: 1117728723 157 | vertices: [] 158 | indices: 159 | edges: [] 160 | weights: [] 161 | - serializedVersion: 2 162 | name: Player-Praying_2 163 | rect: 164 | serializedVersion: 2 165 | x: 64 166 | y: 0 167 | width: 32 168 | height: 16 169 | alignment: 0 170 | pivot: {x: 0, y: 0} 171 | border: {x: 0, y: 0, z: 0, w: 0} 172 | outline: [] 173 | physicsShape: [] 174 | tessellationDetail: -1 175 | bones: [] 176 | spriteID: 7be5e0bcffffffff0800000000000000 177 | internalID: -888250697 178 | vertices: [] 179 | indices: 180 | edges: [] 181 | weights: [] 182 | - serializedVersion: 2 183 | name: Player-Praying_3 184 | rect: 185 | serializedVersion: 2 186 | x: 96 187 | y: 0 188 | width: 32 189 | height: 16 190 | alignment: 0 191 | pivot: {x: 0, y: 0} 192 | border: {x: 0, y: 0, z: 0, w: 0} 193 | outline: [] 194 | physicsShape: [] 195 | tessellationDetail: -1 196 | bones: [] 197 | spriteID: 1ca9d296000000000800000000000000 198 | internalID: 1764596417 199 | vertices: [] 200 | indices: 201 | edges: [] 202 | weights: [] 203 | - serializedVersion: 2 204 | name: Player-Praying_4 205 | rect: 206 | serializedVersion: 2 207 | x: 128 208 | y: 0 209 | width: 32 210 | height: 16 211 | alignment: 0 212 | pivot: {x: 0, y: 0} 213 | border: {x: 0, y: 0, z: 0, w: 0} 214 | outline: [] 215 | physicsShape: [] 216 | tessellationDetail: -1 217 | bones: [] 218 | spriteID: d851b7a1000000000800000000000000 219 | internalID: 444274061 220 | vertices: [] 221 | indices: 222 | edges: [] 223 | weights: [] 224 | outline: [] 225 | physicsShape: [] 226 | bones: [] 227 | spriteID: 5e97eb03825dee720800000000000000 228 | internalID: 0 229 | vertices: [] 230 | indices: 231 | edges: [] 232 | weights: [] 233 | secondaryTextures: [] 234 | nameFileIdTable: 235 | Player-Praying_4: 444274061 236 | Player-Praying_1: 1117728723 237 | Player-Praying_0: 166234848 238 | Player-Praying_2: -888250697 239 | Player-Praying_3: 1764596417 240 | spritePackingTag: 241 | pSDRemoveMatte: 0 242 | pSDShowRemoveMatteOption: 0 243 | userData: 244 | assetBundleName: 245 | assetBundleVariant: 246 | -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-Walk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sgaumin/AnimExpress/3dbb83724c81ba2aebf025f5b8f0087a789c9d35/Examples/CharacterAnimExpress/SpriteSheets/Player-Walk.png -------------------------------------------------------------------------------- /Examples/CharacterAnimExpress/SpriteSheets/Player-Walk.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 97d9c0de48590874caee342684467019 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 12 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | ignoreMasterTextureLimit: 0 28 | grayScaleToAlpha: 0 29 | generateCubemap: 6 30 | cubemapConvolution: 0 31 | seamlessCubemap: 0 32 | textureFormat: 1 33 | maxTextureSize: 2048 34 | textureSettings: 35 | serializedVersion: 2 36 | filterMode: 0 37 | aniso: 1 38 | mipBias: 0 39 | wrapU: 1 40 | wrapV: 1 41 | wrapW: 1 42 | nPOTScale: 0 43 | lightmap: 0 44 | compressionQuality: 50 45 | spriteMode: 2 46 | spriteExtrude: 1 47 | spriteMeshType: 0 48 | alignment: 0 49 | spritePivot: {x: 0.5, y: 0.5} 50 | spritePixelsToUnits: 16 51 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 52 | spriteGenerateFallbackPhysicsShape: 0 53 | alphaUsage: 1 54 | alphaIsTransparency: 1 55 | spriteTessellationDetail: -1 56 | textureType: 8 57 | textureShape: 1 58 | singleChannelComponent: 0 59 | flipbookRows: 1 60 | flipbookColumns: 1 61 | maxTextureSizeSet: 0 62 | compressionQualitySet: 0 63 | textureFormatSet: 0 64 | ignorePngGamma: 0 65 | applyGammaDecoding: 0 66 | cookieLightType: 0 67 | platformSettings: 68 | - serializedVersion: 3 69 | buildTarget: DefaultTexturePlatform 70 | maxTextureSize: 2048 71 | resizeAlgorithm: 0 72 | textureFormat: 4 73 | textureCompression: 1 74 | compressionQuality: 50 75 | crunchedCompression: 0 76 | allowsAlphaSplitting: 0 77 | overridden: 0 78 | androidETC2FallbackOverride: 0 79 | forceMaximumCompressionQuality_BC6H_BC7: 0 80 | - serializedVersion: 3 81 | buildTarget: Standalone 82 | maxTextureSize: 2048 83 | resizeAlgorithm: 0 84 | textureFormat: -1 85 | textureCompression: 1 86 | compressionQuality: 50 87 | crunchedCompression: 0 88 | allowsAlphaSplitting: 0 89 | overridden: 0 90 | androidETC2FallbackOverride: 0 91 | forceMaximumCompressionQuality_BC6H_BC7: 0 92 | - serializedVersion: 3 93 | buildTarget: Server 94 | maxTextureSize: 2048 95 | resizeAlgorithm: 0 96 | textureFormat: -1 97 | textureCompression: 1 98 | compressionQuality: 50 99 | crunchedCompression: 0 100 | allowsAlphaSplitting: 0 101 | overridden: 0 102 | androidETC2FallbackOverride: 0 103 | forceMaximumCompressionQuality_BC6H_BC7: 0 104 | - serializedVersion: 3 105 | buildTarget: WebGL 106 | maxTextureSize: 2048 107 | resizeAlgorithm: 0 108 | textureFormat: -1 109 | textureCompression: 1 110 | compressionQuality: 50 111 | crunchedCompression: 0 112 | allowsAlphaSplitting: 0 113 | overridden: 0 114 | androidETC2FallbackOverride: 0 115 | forceMaximumCompressionQuality_BC6H_BC7: 0 116 | spriteSheet: 117 | serializedVersion: 2 118 | sprites: 119 | - serializedVersion: 2 120 | name: Player-Walk_0 121 | rect: 122 | serializedVersion: 2 123 | x: 0 124 | y: 0 125 | width: 32 126 | height: 16 127 | alignment: 0 128 | pivot: {x: 0, y: 0} 129 | border: {x: 0, y: 0, z: 0, w: 0} 130 | outline: [] 131 | physicsShape: [] 132 | tessellationDetail: -1 133 | bones: [] 134 | spriteID: 358e17d0000000000800000000000000 135 | internalID: 225568851 136 | vertices: [] 137 | indices: 138 | edges: [] 139 | weights: [] 140 | - serializedVersion: 2 141 | name: Player-Walk_1 142 | rect: 143 | serializedVersion: 2 144 | x: 32 145 | y: 0 146 | width: 32 147 | height: 16 148 | alignment: 0 149 | pivot: {x: 0, y: 0} 150 | border: {x: 0, y: 0, z: 0, w: 0} 151 | outline: [] 152 | physicsShape: [] 153 | tessellationDetail: -1 154 | bones: [] 155 | spriteID: 0e0cd4adffffffff0800000000000000 156 | internalID: -632438560 157 | vertices: [] 158 | indices: 159 | edges: [] 160 | weights: [] 161 | - serializedVersion: 2 162 | name: Player-Walk_2 163 | rect: 164 | serializedVersion: 2 165 | x: 64 166 | y: 0 167 | width: 32 168 | height: 16 169 | alignment: 0 170 | pivot: {x: 0, y: 0} 171 | border: {x: 0, y: 0, z: 0, w: 0} 172 | outline: [] 173 | physicsShape: [] 174 | tessellationDetail: -1 175 | bones: [] 176 | spriteID: 1395bf43000000000800000000000000 177 | internalID: 888887601 178 | vertices: [] 179 | indices: 180 | edges: [] 181 | weights: [] 182 | - serializedVersion: 2 183 | name: Player-Walk_3 184 | rect: 185 | serializedVersion: 2 186 | x: 96 187 | y: 0 188 | width: 32 189 | height: 16 190 | alignment: 0 191 | pivot: {x: 0, y: 0} 192 | border: {x: 0, y: 0, z: 0, w: 0} 193 | outline: [] 194 | physicsShape: [] 195 | tessellationDetail: -1 196 | bones: [] 197 | spriteID: d26bdac1000000000800000000000000 198 | internalID: 481146413 199 | vertices: [] 200 | indices: 201 | edges: [] 202 | weights: [] 203 | outline: [] 204 | physicsShape: [] 205 | bones: [] 206 | spriteID: 5e97eb03825dee720800000000000000 207 | internalID: 0 208 | vertices: [] 209 | indices: 210 | edges: [] 211 | weights: [] 212 | secondaryTextures: [] 213 | nameFileIdTable: 214 | Player-Walk_0: 225568851 215 | Player-Walk_3: 481146413 216 | Player-Walk_1: -632438560 217 | Player-Walk_2: 888887601 218 | spritePackingTag: 219 | pSDRemoveMatte: 0 220 | pSDShowRemoveMatteOption: 0 221 | userData: 222 | assetBundleName: 223 | assetBundleVariant: 224 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Sébastien Gaumin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /LICENSE.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 16245cbcf741b2d479239342b069b62c 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | # Anim-Express 4 | 5 | [![Unity 2020.3](https://img.shields.io/badge/unity-2020.3%2B-blue.svg)](https://unity3d.com/get-unity/download) 6 | [![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg)](https://github.com/sgaumin/AnimExpress/blob/main/LICENSE.md) 7 | [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/Seb_gamedev.svg?style=social&label=Follow%20%40Seb_gamedev)](https://twitter.com/Seb_gamedev) 8 | 9 | **Lightweight Unity Utility to quickly setup 2D animations** 10 |
11 | 12 | ## Installation 13 | You can install this library by the steps below. 14 | 15 | 1. Select **Window > Package Manager** from the menu bar. 16 | 2. Click the **+** button in the upper left corner of the window and select **Add package from git URL...**. 17 | 3. Enter the following URL in the input field and click **Add**. 18 | 19 | ``` 20 | https://github.com/sgaumin/AnimExpress.git 21 | ``` 22 | 23 | ## Setup 24 | 25 | ### Animation Asset 26 | After importing texture in the project, we can use utility method to generate animation assets. 27 |

28 | AnimationExpressSetup 29 |

30 | 31 | ### Animator Component 32 |

33 | AnimatorExpress 34 |

35 | 36 | ## Features 37 | 38 | ### Play Animation 39 | ```csharp 40 | animator = GetComponent(); 41 | animator.Play("AnimationName"); 42 | ``` 43 | 44 | ### Stop Animation 45 | ```csharp 46 | animator = GetComponent(); 47 | animator.Stop(); 48 | ``` 49 | 50 | ### Event Subscription 51 | ```csharp 52 | private AnimatorExpress animator; 53 | 54 | private void Awake() 55 | { 56 | animator = GetComponent(); 57 | 58 | animator.AddListener("FrameName_0", CallBack1); 59 | animator.AddListener("FrameName_1", CallBack2); 60 | } 61 | 62 | private void OnDestroy() 63 | { 64 | animator.RemoveListener("FrameName_0", CallBack1); 65 | animator.RemoveListener("FrameName_1", CallBack2); 66 | } 67 | ``` 68 | 69 | ## Support 70 | 71 | If you ever come across any issues please feel free to report to the [Issues](https://github.com/sgaumin/AnimExpress/issues) page on this repository. All feedback is appreciated, and will be 72 | taken on board for any future updates. 73 | 74 | ## License 75 | 76 | [MIT License](https://github.com/sgaumin/AnimExpress/blob/main/LICENSE.md) 77 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f417199d9e952e649890f260d0748cd5 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bf4a09ea9dda3824e8290d15af6e1584 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/AnimExpress.Runtime.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AnimExpress.Runtime", 3 | "rootNamespace": "", 4 | "references": [], 5 | "includePlatforms": [], 6 | "excludePlatforms": [], 7 | "allowUnsafeCode": false, 8 | "overrideReferences": false, 9 | "precompiledReferences": [], 10 | "autoReferenced": true, 11 | "defineConstraints": [], 12 | "versionDefines": [], 13 | "noEngineReferences": false 14 | } -------------------------------------------------------------------------------- /Runtime/AnimExpress.Runtime.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a1928c647970bdc40a5b951ad60a7fc9 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime/AnimationExpress.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using UnityEngine; 4 | 5 | namespace AnimExpress 6 | { 7 | [CreateAssetMenu(fileName = "AnimationExpress", menuName = "AnimationExpress", order = 1)] 8 | public class AnimationExpress : ScriptableObject 9 | { 10 | [SerializeField] private bool isLooping = true; 11 | [SerializeField] private bool canBeRestarted; 12 | [SerializeField] private AnimationExpressCompletionOptions onCompletionOption = AnimationExpressCompletionOptions.PlayDefaultAnimation; 13 | [SerializeField] private string methodName; 14 | [SerializeField] private float speedFactor = 1f; 15 | [SerializeField] private List frames; 16 | 17 | public bool IsLooping => isLooping; 18 | public bool CanBeRestarted => canBeRestarted; 19 | internal AnimationExpressCompletionOptions OnCompletionOption => onCompletionOption; 20 | public string MethodName => methodName; 21 | public float SpeedFactor => speedFactor; 22 | public List Frames => frames; 23 | public float TotalDuration => frames.Sum(x => x.Duration) / speedFactor; 24 | 25 | public AnimationExpress(List frames) 26 | { 27 | this.frames = frames; 28 | } 29 | 30 | #if UNITY_EDITOR 31 | 32 | public void AddFrame(Sprite sprite) 33 | { 34 | var frame = new Frame(sprite); 35 | frames.Add(frame); 36 | } 37 | 38 | #endif 39 | } 40 | } -------------------------------------------------------------------------------- /Runtime/AnimationExpress.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cf71752e22bd0a2478c8074f8452590b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: 786962a2a886e514f933140f6b532752, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/AnimationExpressCompletionOptions.cs: -------------------------------------------------------------------------------- 1 | namespace AnimExpress 2 | { 3 | public enum AnimationExpressCompletionOptions 4 | { 5 | PlayDefaultAnimation, 6 | DestroyGameObject, 7 | BroadcastMessage, 8 | None 9 | } 10 | } -------------------------------------------------------------------------------- /Runtime/AnimationExpressCompletionOptions.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 46d19c68661c277408404221e796ee90 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/AnimatorExpress.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using UnityEngine; 6 | 7 | namespace AnimExpress 8 | { 9 | [RequireComponent(typeof(SpriteRenderer))] 10 | public class AnimatorExpress : MonoBehaviour 11 | { 12 | [SerializeField] private List animations = new List(); 13 | 14 | [Header("Settings")] 15 | [SerializeField] private bool playDefaultOnEnabled = true; 16 | 17 | [Header("References")] 18 | [SerializeField] protected SpriteRenderer spriteRenderer; 19 | 20 | private bool hasBeenInitialized; 21 | private Coroutine animationRoutine; 22 | private AnimationExpress currentAnimation; 23 | private Dictionary declaredAnimations; 24 | private Dictionary declaredAnimationEvents; 25 | 26 | public List Animations => animations; 27 | public AnimationExpress Current => currentAnimation; 28 | public bool IsBeingTested { get; set; } 29 | 30 | private void Reset() 31 | { 32 | try 33 | { 34 | if (!Application.isPlaying) 35 | { 36 | if (spriteRenderer != null) 37 | spriteRenderer = GetComponent(); 38 | 39 | spriteRenderer.sprite = animations[0].Frames[0].Sprite; 40 | } 41 | } 42 | catch (System.Exception) { } 43 | } 44 | 45 | private void OnEnable() 46 | { 47 | if (playDefaultOnEnabled) 48 | PlayDefault(); 49 | } 50 | 51 | private void OnDisable() 52 | { 53 | Stop(); 54 | } 55 | 56 | private void Init() 57 | { 58 | hasBeenInitialized = true; 59 | declaredAnimations = new Dictionary(animations.Count); 60 | declaredAnimationEvents = new Dictionary(); 61 | foreach (AnimationExpress animation in animations) 62 | { 63 | declaredAnimations.Add(animation.name, animation); 64 | } 65 | } 66 | 67 | private void PlayDefault() 68 | { 69 | CheckInitialization(); 70 | 71 | if (animations.Count == 0 || currentAnimation == animations[0]) return; 72 | 73 | currentAnimation = animations[0]; // First animation is default 74 | 75 | PlayRoutine(); 76 | } 77 | 78 | public void PlayTesting(string animationKey = "") 79 | { 80 | IsBeingTested = true; 81 | DoPlay(animationKey); 82 | } 83 | 84 | private void DoPlay(string animationKey, bool reversed = false) 85 | { 86 | CheckInitialization(); 87 | 88 | if (string.IsNullOrEmpty(animationKey)) 89 | { 90 | Debug.LogError($"Empty animation detected for {gameObject.name}"); 91 | PlayDefault(); 92 | } 93 | else if (declaredAnimations.TryGetValue(animationKey, out AnimationExpress animation)) 94 | { 95 | if (currentAnimation == animation && !animation.CanBeRestarted) 96 | return; 97 | 98 | currentAnimation = animation; 99 | } 100 | else 101 | { 102 | Debug.LogError($"Animation {animationKey} not found for {gameObject.name}"); 103 | } 104 | 105 | PlayRoutine(reversed); 106 | } 107 | 108 | public void Play(string animationKey = "") 109 | { 110 | if (IsBeingTested) return; 111 | DoPlay(animationKey); 112 | } 113 | 114 | public void PlayReversed(string animationKey = "") 115 | { 116 | if (IsBeingTested) return; 117 | DoPlay(animationKey, true); 118 | } 119 | 120 | public void Stop() 121 | { 122 | CheckInitialization(); 123 | 124 | StopRoutine(); 125 | currentAnimation = null; 126 | } 127 | 128 | public void AddListener(string frameName, Action action) 129 | { 130 | CheckInitialization(); 131 | 132 | Action frameEvent; 133 | if (declaredAnimationEvents.TryGetValue(frameName, out frameEvent)) 134 | { 135 | frameEvent += action; 136 | } 137 | else 138 | { 139 | frameEvent += action; 140 | declaredAnimationEvents.Add(frameName, frameEvent); 141 | } 142 | } 143 | 144 | public void RemoveListener(string frameName, Action action) 145 | { 146 | CheckInitialization(); 147 | 148 | if (declaredAnimationEvents.TryGetValue(frameName, out Action frameEvent)) 149 | { 150 | frameEvent -= action; 151 | } 152 | } 153 | 154 | private void PlayRoutine(bool reversed = false) 155 | { 156 | StopRoutine(); 157 | animationRoutine = StartCoroutine(PlayCore(reversed)); 158 | } 159 | 160 | private void StopRoutine() 161 | { 162 | if (animationRoutine != null) 163 | { 164 | StopCoroutine(animationRoutine); 165 | } 166 | animationRoutine = null; 167 | } 168 | 169 | private void CheckInitialization() 170 | { 171 | if (!hasBeenInitialized) 172 | { 173 | Init(); 174 | } 175 | } 176 | 177 | private IEnumerator PlayCore(bool reversed = false) 178 | { 179 | int currentIndex = 0; 180 | float currentDuration = 0f; 181 | float currentStartTime = Time.time; 182 | Frame currentFrame = null; 183 | List frames = currentAnimation.Frames.ToList(); 184 | bool hasTriggeredEvent = false; 185 | 186 | if (reversed) 187 | frames.Reverse(); 188 | 189 | while (true) 190 | { 191 | if (Time.time >= currentDuration) 192 | { 193 | if (currentIndex >= frames.Count) 194 | { 195 | if (currentAnimation.IsLooping) 196 | { 197 | currentIndex = 0; 198 | currentStartTime = Time.time; 199 | } 200 | else 201 | { 202 | break; 203 | } 204 | } 205 | 206 | currentFrame = frames[currentIndex++]; 207 | spriteRenderer.sprite = currentFrame.Sprite; 208 | currentDuration = Time.time + currentFrame.Duration / currentAnimation.SpeedFactor; 209 | hasTriggeredEvent = false; 210 | } 211 | 212 | // Triggering event attached to this frame 213 | if (!hasTriggeredEvent) 214 | { 215 | hasTriggeredEvent = true; 216 | if (declaredAnimationEvents.TryGetValue(currentFrame.Sprite.name, out Action frameEvent)) 217 | { 218 | frameEvent?.Invoke(); 219 | } 220 | } 221 | 222 | yield return null; 223 | } 224 | 225 | switch (currentAnimation.OnCompletionOption) 226 | { 227 | case AnimationExpressCompletionOptions.PlayDefaultAnimation: 228 | PlayDefault(); 229 | break; 230 | 231 | case AnimationExpressCompletionOptions.DestroyGameObject: 232 | Destroy(gameObject); 233 | break; 234 | 235 | case AnimationExpressCompletionOptions.BroadcastMessage: 236 | BroadcastMessage(currentAnimation.MethodName); 237 | break; 238 | 239 | default: 240 | break; 241 | } 242 | 243 | // In case we were testing an animation here, we reset its testing state. 244 | if (IsBeingTested) 245 | IsBeingTested = false; 246 | } 247 | } 248 | } -------------------------------------------------------------------------------- /Runtime/AnimatorExpress.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ca1d02e5172e20f418b4817c5dc69cc7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {fileID: 2800000, guid: a17be3efcaf712e4fbe8e30b81762980, type: 3} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Frame.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | 4 | namespace AnimExpress 5 | { 6 | [Serializable] 7 | public class Frame 8 | { 9 | [SerializeField] private Sprite sprite; 10 | [SerializeField] private float duration; 11 | 12 | public Sprite Sprite => sprite; 13 | public float Duration => duration; 14 | 15 | public Frame(Sprite sprite) 16 | { 17 | this.sprite = sprite; 18 | this.duration = 0.1f; 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Runtime/Frame.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f92e16f5144d9364aabacd4c7d1c6e81 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Tests.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c3ae88ff1ba188944bd8776e8b64fa3f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Tests/Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7408f7a4fd697b04b9e8c62a00345e1b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Tests/Runtime/AnimExpress.Tests.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AnimExpress.Tests", 3 | "rootNamespace": "", 4 | "references": [ 5 | "GUID:a1928c647970bdc40a5b951ad60a7fc9" 6 | ], 7 | "includePlatforms": [], 8 | "excludePlatforms": [], 9 | "allowUnsafeCode": false, 10 | "overrideReferences": false, 11 | "precompiledReferences": [], 12 | "autoReferenced": true, 13 | "defineConstraints": [], 14 | "versionDefines": [], 15 | "noEngineReferences": false 16 | } -------------------------------------------------------------------------------- /Tests/Runtime/AnimExpress.Tests.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5b98c5ebc2bbcee45a109f9c038c82e1 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Tests/Runtime/AnimatorTester.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace AnimExpress 4 | { 5 | [RequireComponent(typeof(AnimatorExpress))] 6 | public class AnimatorTester : MonoBehaviour 7 | { 8 | private AnimatorExpress animator; 9 | 10 | private void Awake() 11 | { 12 | animator = GetComponent(); 13 | 14 | animator.AddListener("Player-Idle_4", Logging); 15 | animator.AddListener("Player-DeathWater_1", Logging); 16 | } 17 | 18 | private void OnDestroy() 19 | { 20 | animator.RemoveListener("Player-Idle_4", Logging); 21 | animator.RemoveListener("Player-DeathWater_1", Logging); 22 | } 23 | 24 | private void Logging() 25 | { 26 | Debug.Log($"Houba"); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Tests/Runtime/AnimatorTester.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 73a24d3ed76a4b04eb5a8dc70f488145 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.sgaumin.animexpress", 3 | "version": "0.1.4", 4 | "displayName": "Anim Express", 5 | "description": "Lightweight Unity Utility to quickly setup 2D animations", 6 | "unity": "2018.4", 7 | "unityRelease": "0b5", 8 | "documentationUrl": "https://github.com/sgaumin/AnimExpress/blob/main/README.md", 9 | "changelogUrl": "https://github.com/sgaumin/AnimExpress/blob/main/CHANGELOG.md", 10 | "licensesUrl": "https://github.com/sgaumin/AnimExpress/blob/main/LICENSE.md", 11 | "samples": [{ 12 | "displayName": "Character AnimExpress", 13 | "description": "Contains samples for Character Animations using AnimExpress.", 14 | "path": "Samples~/SampleCharacterAnimExpress" 15 | }], 16 | "keywords": ["animation", "2D", "inspector", "editor"], 17 | "type": "tool", 18 | "hideInEditor": true, 19 | "author": { 20 | "name": "Sébastien Gaumin", 21 | "email": "sgaumin@gmail.com", 22 | "url": "https://github.com/sgaumin" 23 | } 24 | } -------------------------------------------------------------------------------- /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6b0358be644c71941bb47525f89ec970 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------