Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.

Question Creating sprite animation from sprite array in runtime

Discussion in 'Animation' started by Gunner22, May 31, 2021.

  1. Gunner22

    Gunner22

    Joined:
    Jan 15, 2020
    Posts:
    52
    Hi I would like to create animation from array of sprites that I create in runtime. I manage to create animation clip but when I assign it to animation it does not play. I cant create animation in editor because sprits I am using for animation existe only in runtime.

    Here is my code:
    Code (csharp):
    1.  
    2.  public void CreateAnimation()
    3.     {
    4.         Sprite[] sprites = createSprite();
    5.  
    6.         AnimationClip animClip = new AnimationClip();
    7.  
    8.         AnimationClipSettings newSettings = new AnimationClipSettings();
    9.         newSettings.loopTime = true;
    10.         AnimationUtility.SetAnimationClipSettings(animClip, newSettings);
    11.  
    12.         EditorCurveBinding spriteBinding = EditorCurveBinding.PPtrCurve("", typeof(SpriteRenderer), "m_sprite");
    13.  
    14.         float interval = 1 / 4f;
    15.         ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length + 1];
    16.  
    17.         for (int i = 0; i < spriteKeyFrames.Length; i++)
    18.         {
    19.             if(i == spriteKeyFrames.Length - 1)
    20.             {
    21.                 spriteKeyFrames[i].time = i * interval;
    22.                 spriteKeyFrames[i].value = sprites[0];
    23.             }
    24.             else
    25.             {
    26.                 spriteKeyFrames[i].time = i * interval;
    27.                 spriteKeyFrames[i].value = sprites[i];
    28.             }
    29.         }
    30.  
    31.         AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames);
    32.  
    33.         anim.clip = animClip;
    34.         anim.AddClip(animClip, "test");
    35.         anim.Play("test");
    36.     }
    37.  
    I also tried using AnimatorOverrideController:

    Code (csharp):
    1.  
    2. public void CreateAnimation()
    3.     {
    4.         Sprite[] sprites = createSprite();
    5.  
    6.         AnimationClip animClip = new AnimationClip();
    7.      
    8.         AnimationClipSettings newSettings = new AnimationClipSettings();
    9.         newSettings.loopTime = true;
    10.         AnimationUtility.SetAnimationClipSettings(animClip, newSettings);
    11.      
    12.         EditorCurveBinding spriteBinding = EditorCurveBinding.PPtrCurve("", typeof(SpriteRenderer), "m_sprite");
    13.  
    14.         float interval = 1 / 4f;
    15.         ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length + 1];
    16.  
    17.         for (int i = 0; i < spriteKeyFrames.Length; i++)
    18.         {
    19.             if(i == spriteKeyFrames.Length - 1)
    20.             {
    21.                 spriteKeyFrames[i].time = i * interval;
    22.                 spriteKeyFrames[i].value = sprites[0];
    23.             }
    24.             else
    25.             {
    26.                 spriteKeyFrames[i].time = i * interval;
    27.                 spriteKeyFrames[i].value = sprites[i];
    28.             }
    29.         }
    30.  
    31.         AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames);
    32.  
    33.         AnimatorOverrideController animatorOverrideController = new AnimatorOverrideController();
    34.         animatorOverrideController.runtimeAnimatorController = animC.runtimeAnimatorController;
    35.         animatorOverrideController["TestAnim"] = animClip;
    36.         animC.runtimeAnimatorController = animatorOverrideController;
    37.  
    38.     }
    39.  
    createSprite() function returns array of sprites i am using for animation
     
  2. Gunner22

    Gunner22

    Joined:
    Jan 15, 2020
    Posts:
    52
    BUMP!!