Как я могу получить единство, чтобы ждать, пока моя анимация не закончится

Я работаю над проектом Unity и хочу переключаться между сценами с анимацией постепенного появления и исчезновения. Анимация завершена, и я могу получить к ним доступ, но я работаю с функциями yield и Ienumerator из учебника, но не могу заставить его работать.

//from my animation script
public IEnumerator fadeIn()
{
    isFading = true;
    animator.SetTrigger("FadeIn");
    while (isFading)
    {
        yield return new WaitForSeconds(3f);
    }
}

// from my main menu script.
public void btnPlay()
{
    StartCoroutine(fadeIn());
    Debug.Log("AfterIn");
    SceneManager.LoadScene("playOptions");
    StartCoroutine(fadeOut());
    Debug.Log("AfterOut");
}

IEnumerator fadeIn()
{
    yield return StartCoroutine(animatorscript.fadeIn());
}
IEnumerator fadeOut()
{
    yield return StartCoroutine(animatorscript.fadeOut());
}

Я обновил свой вопрос. Но когда я запускаю его, я не вижу анимации. Он направляется прямо на следующую сцену и отлаживает сообщения непосредственно друг за другом.

1 ответ

Решение

Если вы хотите запустить Coroutine, вам нужно назвать его так StartCoroutine(fadeIn) так же, как вы делаете yield return StartCoroutine(animatorscript.fadeIn()),

Так что вам нужно добавить

public void btnPlay()
{
    StartCoroutine(fadeIn);
    SceneManager.LoadScene("playOptions");
    StartCoroutine(fadeOut);
}

Смотрите здесь для получения дополнительной информации о StartCoroutine

ОБНОВЛЕНИЕ: Что касается вашего обновленного вопроса, я предполагаю, что вы хотите подождать, пока фейдин завершит загрузку сцены.

Нечто подобное могло бы сработать;

public void btnPlay()
{
    StartCoroutine(SceneFadeAndLoad);
}

IEnumerator SceneFadeAndLoad()
{
    yield return StartCoroutine(fadeIn);
    SceneManager.LoadScene("playOptions");
    yield return StartCoroutine(fadeOut);
}
Другие вопросы по тегам