Я сравниваю StartCoroutine и Invoke в методе, который должен выполняться в определенное время. Насколько я понимаю, эти две функции должны занимать одно и то же время (1 сек). Вызов первого метода с вызовом завершается примерно за 1 сек., Используя сопрограмму занимает почти 2 секунды! Как это может быть?Накладные расходы StartCoroutine vs Invoke (Unity3D)
private void iincrease_arrow_invoked(){
if (arrow.transform.localScale.x <= 1f) {
arrow.transform.localScale = new Vector3 (arrow.transform.localScale.x + 0.01f, arrow.transform.localScale.y, arrow.transform.localScale.z);
Invoke ("iincrease_arrow_invoked", 0.01f);
}
}
IEnumerator increase_arrow_coroutine(){
yield return new WaitForSeconds (0.01f);
if (arrow.transform.localScale.x <= 1f) {
arrow.transform.localScale = new Vector3 (arrow.transform.localScale.x + 0.01f, arrow.transform.localScale.y, arrow.transform.localScale.z);
StartCoroutine (increase_arrow_coroutine());
}
}
Вы пытались использовать, например, цикл while вместо рекурсии в сопрограмме? –
Не должен ли 'yield возвращать новые WaitForSeconds (0.01f);' строка находится в конце сопрограммы? Я не знаю, будет ли это иметь значение –
с использованием цикла while для меня требуется 2 секунды. , уступая в конце, продолжает вызывать сопрограмму, а затем ждет, так что в основном он мгновенно выполняет масштабирование. – Johannes