private static AnimatorOverrideController CreateAnimatorOverride(Sprite[] sprites, AnimationClip[] overrideClips)
    {
        var settings         = DefaultAnimationsSettings.Instance;
        var animatorOverride = AssetHelper.GetAsset <AnimatorOverrideController>(sprites.GetSpritesheetName());

        animatorOverride.runtimeAnimatorController = settings.AnimatorController;

        animatorOverride.ApplyOverrides(
            settings.AnimationsMapping.Select(m => m.ClipToOverride).ToArray(),
            overrideClips);

        animatorOverride.SaveAsset();

        return(animatorOverride);
    }
    private static AnimationClip CreateAnimationClip(DefaultAnimationsSettings.AnimationMapping map, DefaultAnimationsSettings settings, params Sprite[] sprites)
    {
        var clip = AssetHelper.GetAsset <AnimationClip>($"{sprites.GetSpritesheetName()}-{map.Name}");

        clip.frameRate = map.ClipToOverride.frameRate;
        clip.wrapMode  = map.ClipToOverride.wrapMode;

        // In more complex animation clip, maybe will be needed to copy more settings.
        var clipToOverrideSettings = AnimationUtility.GetAnimationClipSettings(map.ClipToOverride);

        clip.EditSettings(s => s.loopTime = clipToOverrideSettings.loopTime);

        // Create the keyframes based on source animation, but with the new sprites.
        var keyFramesToOverride = map.ClipToOverride.GetKeyFrames();
        var keyFrames           = keyFramesToOverride.CreateWithSprites(sprites);

        clip.SetKeyFrames(keyFrames);

        clip.SaveAsset();

        return(clip);
    }