Некоректная работа корутин Unity C#

Я пробую увеличивать скорость объекта, но сначало оно увеличивает более менее нормально, а потом с нереальной скоростью. Помогите пожалуйста.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Run : MonoBehaviour
{

    public float speed;
    public Vector2 direction;
    private float buster = 0.01f;

    void Start()
    {

    }

    // Update is called once per frame
    void FixedUpdate()
    {
        transform.Translate(direction.normalized * speed);
        StartCoroutine(bust());
    }

    IEnumerator bust()
    {
        yield return new WaitForSeconds(1f);
        speed = speed + buster;
    }
}

Ответы (2 шт):

Автор решения: Вадим

Очень странный код если честно. FixedUpdate выполняется в среднем 30 раз в секунду (насколько я это помню) Итого у вас создается 30 корутин, в секунду, каждая из которых через "секунду" увеличит скорость. Причем "WaitForSeconds" работает не ровно одну секунду. И я так понимаю при запуске скрипта у вас секундная задержка (корутины копятся), а потом резкий рывок (корутины начинают срабатывать, по 30 штук в секунду и в бесконечность). Причем срабатывать рывками (в некоторых случаях по две три корутины за тик).

Это точно задуманная логика?

P.S. Сейчас перепроверил. Не 30, 50 раз в секунду)

→ Ссылка
Автор решения: Vlad Klyuenkov

Если вы хотите каждую секунду увеличивать скорость то сделайте так:

    private void Start()
    {
        StartCoroutine(bust());
    }
    private void FixedUpdate()
    {
        transform.Translate(direction.normalized * (speed + buster) * Time.fixedDeltaTime);
    }
    private IEnumerator bust()
    {
        while(true)
        {
            yield return new WaitForSeconds(1f);
            buster += buster;
        }
    }
→ Ссылка