Некоректная работа корутин 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 раз в секунду)
Если вы хотите каждую секунду увеличивать скорость то сделайте так:
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;
}
}