using System.Collections.Generic; using UnityEditor.Animations; using UnityEditor.AssetImporters; using UnityEngine; namespace UnityEditor.U2D.Aseprite { internal static class AnimatorControllerGeneration { public static void Generate(AssetImportContext ctx, string assetName, GameObject rootGameObject, bool generateModelPrefab) { var assetObjects = new List(); ctx.GetObjects(assetObjects); var animationClips = new List(); foreach (var obj in assetObjects) { if (obj is AnimationClip clip) animationClips.Add(clip); } if (animationClips.Count == 0) return; var controller = new AnimatorController(); controller.name = assetName; controller.AddLayer("Base Layer"); foreach (var clip in animationClips) controller.AddMotion(clip); ctx.AddObjectToAsset(controller.name + "_Controller", controller); foreach (var layer in controller.layers) { var stateMachine = layer.stateMachine; ctx.AddObjectToAsset(stateMachine.name + "_StateMachine", stateMachine); foreach(var state in stateMachine.states) ctx.AddObjectToAsset(state.state.name + "_State", state.state); } if (generateModelPrefab) { var animator = rootGameObject.AddComponent(); AnimatorController.SetAnimatorController(animator, controller); } } } }