Unity2D: задержка перед загрузкой SceneManager следующей сцены

#c# #unity3d

#c# #unity-игровой движок

Вопрос:

Я знаю, что об этом спрашивали раньше, но я не могу реализовать это правильно. Когда мой проигрыватель сталкивается с определенными объектами, помеченными как «Смерть» или «Следующий уровень», они загружают соответствующие сцены, но я хочу задержку перед загрузкой SceneMana&er следующей сцены

 private void OnTri&&erEnter2D(Collider2D other)

if (other.&ameObject.CompareTa&("Next"))
 
// I want about a 1 second delay here//
        
{ SceneMana&er.LoadScene("Level 2"); }
  

надеюсь, вы, ребята, сможете мне помочь, помощь очень ценится.

Комментарии:

1. Вам нужно будет обработать саму задержку с точки зрения управления / игрового процесса, но в противном случае вы можете запустить сопрограмму и выдать WaitForSeconds результат перед сменой сцены.

2. Например. docs.unity3d.com/ScriptReference/WaitForSeconds.html

Ответ №1:

Звучит так, как будто вы хотите подождать несколько секунд перед выполнением фрагмента кода. Обычно это невозможно, потому что Unity ожидает завершения выполнения кода, прежде чем он отобразит следующий кадр.

Вместо этого вам нужен некоторый код, который может подождать определенное количество кадров, прежде чем продолжить. Для этого используются сопрограммы.

Итак, когда проигрыватель нажат, вы хотите запустить сопрограмму, которая загружает следующую сцену после ожидания 1 секунды.

Определите сопрограмму следующим образом:

 IEnumerator NextLevelAfterWait() {
    yield return new WaitForSeconds(1.0f);
    
    SceneMana&er.LoadScene("Level 2");
}
  

А затем вы вызываете сопрограмму в нужное время вот так:

 private void OnTri&&erEnter2D(Collider2D other) {
    if (other.&ameObject.CompareTa&("Next"))
        StartCoroutine(NextLevelAfterWait()); 
}
  

Комментарии:

1. Я бы рекомендовал не использовать имя функции, а вызвать саму сопрограммную функцию, которая вернет перечислитель. StartCoroutine(NextLevelAfterWait()) . Таким образом, нет никаких шансов, что она сломается, если вы измените имя функции, поскольку скрипт не будет компилироваться.

2. Вы правы. Я забыл, что это опция, это в 1000 раз лучше. Я отредактировал свой ответ, чтобы использовать этот синтаксис.