public static AnimationClip Create(SpriteAnimationClipDefinition spriteAnimationDefinition)
    {
        AnimationClip animClip = new AnimationClip
        {
            name      = spriteAnimationDefinition.Name,
            frameRate = spriteAnimationDefinition.FrameRate,
            wrapMode  = spriteAnimationDefinition.WrapMode
        };

        if (spriteAnimationDefinition.IsLoop)
        {
            AnimationClipSettings settings = AnimationUtility.GetAnimationClipSettings(animClip);
            settings.loopTime = true;
            AnimationUtility.SetAnimationClipSettings(animClip, settings);
        }

        EditorCurveBinding editorCurveBinding = EditorCurveBinding.PPtrCurve(string.Empty, typeof(SpriteRenderer), "m_Sprite");

        ObjectReferenceKeyframe[] keyframes = spriteAnimationDefinition.SpriteKeyframes
                                              .Select(spriteKeyframe => spriteKeyframe.ToObjectReferenceKeyframe())
                                              .ToArray();

        AnimationUtility.SetObjectReferenceCurve(animClip, editorCurveBinding, keyframes);

        return(animClip);
    }
    public static void Execute()
    {
        IEnumerable<Sprite> sprites = Selection.objects.OfType<Sprite>();
        if (!sprites.Any())
        {
            Debug.LogWarning("Please selecting sprites.");
            return;
        }

        List<SpriteKeyframeDefinition> spriteKeyframes = sprites
            .OrderBy(it => it.name)
            .Select((Sprite sprite, int index) => new SpriteKeyframeDefinition
            {
                Value = sprite,
                Time = 0.1F * index,
            })
            .ToList();

        SpriteAnimationClipDefinition definition = new SpriteAnimationClipDefinition
        {
            Name = "Sample",
            SpriteKeyframes = spriteKeyframes,
            WrapMode = WrapMode.Loop,
            IsLoop = true,
            FrameRate = 60.0F
        };

        string path = "Assets/Sample.anim";
        AnimationClip animClip = SpriteAnimationClipCreator.Create(definition);
        AssetDatabase.CreateAsset(animClip, path);
    }
    public static void Execute()
    {
        IEnumerable <Sprite> sprites = Selection.objects.OfType <Sprite>();

        if (!sprites.Any())
        {
            Debug.LogWarning("Please selecting sprites.");
            return;
        }

        List <SpriteKeyframeDefinition> spriteKeyframes = sprites
                                                          .OrderBy(it => it.name)
                                                          .Select((Sprite sprite, int index) => new SpriteKeyframeDefinition
        {
            Value = sprite,
            Time  = 0.1F * index,
        })
                                                          .ToList();

        SpriteAnimationClipDefinition definition = new SpriteAnimationClipDefinition
        {
            Name            = "Sample",
            SpriteKeyframes = spriteKeyframes,
            WrapMode        = WrapMode.Loop,
            IsLoop          = true,
            FrameRate       = 60.0F
        };

        string        path     = "Assets/Sample.anim";
        AnimationClip animClip = SpriteAnimationClipCreator.Create(definition);

        AssetDatabase.CreateAsset(animClip, path);
    }
    public static AnimationClip Create(SpriteAnimationClipDefinition spriteAnimationDefinition)
    {
        AnimationClip animClip = new AnimationClip
        {
            name = spriteAnimationDefinition.Name,
            frameRate = spriteAnimationDefinition.FrameRate,
            wrapMode = spriteAnimationDefinition.WrapMode
        };

        if (spriteAnimationDefinition.IsLoop)
        {
            AnimationClipSettings settings = AnimationUtility.GetAnimationClipSettings(animClip);
            settings.loopTime = true;
            AnimationUtility.SetAnimationClipSettings(animClip, settings);
        }

        EditorCurveBinding editorCurveBinding = EditorCurveBinding.PPtrCurve(string.Empty, typeof(SpriteRenderer), "m_Sprite");

        ObjectReferenceKeyframe[] keyframes = spriteAnimationDefinition.SpriteKeyframes
            .Select(spriteKeyframe => spriteKeyframe.ToObjectReferenceKeyframe())
            .ToArray();

        AnimationUtility.SetObjectReferenceCurve(animClip, editorCurveBinding, keyframes);

        return animClip;
    }