Как я могу получить единство, чтобы ждать, пока моя анимация не закончится
Я работаю над проектом 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);
}