У меня есть скрипт «WaitForAnimThenLoad», который используется для загрузки сцен после ожидания анимации на предыдущем экране до конца sh:
public class WaitForAnimThenLoad : MonoBehaviour
{
public string animName;
public string levelName;
private Animator animator;
public void Play()
{
StartCoroutine(LoadAfterAnim());
}
public IEnumerator LoadAfterAnim()
{
animator = GetComponent<Animator>();
AnimationClip[] clips = animator.runtimeAnimatorController.animationClips;
foreach (AnimationClip clip in clips)
{
if (clip.name == animName)
{
yield return new WaitForSeconds(clip.length);
SceneManager.LoadSceneAsync(levelName);
}
}
}
}
Теперь этот скрипт работает; тем не менее, я пытаюсь обновить скрипт, чтобы я мог загрузить что-нибудь после анимации (например, когда я нажимаю кнопку «Параметры» на экране заголовка, он будет ждать окончания анимации до sh, а затем установить "Параметры экрана" GameObject для "Активный". Я попытался сделать это, проверив, была ли сцена или нет. Вот как выглядит новый LoadAfterAnim ():
public IEnumerator LoadAfterAnim()
{
animator = GetComponent<Animator>();
AnimationClip[] clips = animator.runtimeAnimatorController.animationClips;
foreach (AnimationClip clip in clips)
{
if (clip.name == animName)
{
yield return new WaitForSeconds(clip.length);
if (SceneManager.GetSceneByName(levelName).IsValid())
{
SceneManager.LoadSceneAsync(levelName);
}
else
{
Debug.Log("scene not valid");
}
}
}
}
Однако, даже когда сцена действительна (и загружает сцену без оператора if), она всегда возвращает сообщение «сцена недействительна». Почему это так? Стоит ли разделять «ожидание анимации, затем загрузку сцены» и «ожидание анимации, а затем загрузку» gameobject "в отдельные сценарии?
Рады предоставить дополнительную информацию. Спасибо!