Как создавать и запускать анимацию во время выполнения?

#c# #unity3d #animation #runtime

Вопрос:

В настоящее время я создаю игру и хочу создать и запустить анимацию во время выполнения. Это то, что я получил до сих пор:

 void Start()
{
    Sprite[] sprites = upgrades.GetComponent<uprgades>().sprites;
    AnimationClip animClip = new AnimationClip();
    animClip.frameRate = 60;

    EditorCurveBinding spriteBinding = new EditorCurveBinding();
    spriteBinding.type = typeof(SpriteRenderer);
    spriteBinding.path = "";
    spriteBinding.propertyName = "m_Sprite"; 

    ObjectReferenceKeyframe[] spriteKeyFrames = new ObjectReferenceKeyframe[sprites.Length];
    for(int j = 0; j < (sprites.Length); j  )
    {
        spriteKeyFrames[j] = new ObjectReferenceKeyframe();
        spriteKeyFrames[j].time = j;
        spriteKeyFrames[j].value = sprites[j];
    }

    AnimationUtility.SetObjectReferenceCurve(animClip, spriteBinding, spriteKeyFrames);
    AnimationClipSettings animClipSett = new AnimationClipSettings();
    animClipSett.loopTime = true;

    animClip.legacy = true; //added
 
    AnimationUtility.SetAnimationClipSettings(animClip, animClipSett);
 

Я не все понимаю до конца, потому что нашел это в Интернете. Но теперь мне нужно запустить анимацию. Поэтому я сделал это:

     Animation anim = someGameObject.GetComponent<Animation>();
    anim.clip = animClip;
    anim.Play();
}
 

Но это не работает. Я думаю, что это как-то связано с тем, что у меня нет никакого аниматора / или контроллера, но я не знаю, нужно ли мне добавлять их, как и где я должен это сделать

Комментарии:

1.Вы пробовали сделать AnimationClip legacy это ?

2. Я добавил его (вы можете видеть, где в коде выше), но, похоже, это ничего не меняет

Ответ №1:

Где вы запускаете анимацию? Это в функции обновления?