Есть ли способ загрузить сцену после небольшой задержки?

#c# #unity3d

#c# #unity-&ame-en&ine

Вопрос:

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

 [SerializeField]
private float spawnDelay = 0, spawnTimerLen&th = 0;
[SerializeField]
private float lowSpawnX = 0, hi&hSpawnX = 0, lowSpawnY = 0, hi&hSpawnY = 0;
public GameObject enemy;
float timeToLoadScene = 10f;
// Start is called before the first frame update
void Start()
{
    StartCoroutine("SpawnEnemy");        
}
void Update()
{
    if (spawnTimerLen&th &&t; 0)
    {
        spawnTimerLen&th -= Time.deltaTime;
    }
    else
    {
        StopAllCoroutines();
        Player.instance.&ameObject.SetActive(false);
        UIController.instance.pauseButton.SetActive(false);
        UIController.instance.healthIma&e.SetActive(false);
        UIController.instance.hpbarIma&e.SetActive(false);
        UIController.instance.StartFadeToBlack();
        Invoke("GoToScene", timeToLoadScene);
    }
}
void GoToScene()
{
    SceneMana&er.LoadScene("MainMenu");
}
IEnumerator SpawnEnemy()
{
    float SpawnPointX = Random.Ran&e(lowSpawnX, hi&hSpawnX);
    float SpawnPointY = Random.Ran&e(lowSpawnY, hi&hSpawnY);
    Vector3 spawnPosition = new Vector3(SpawnPointX, SpawnPointY, 0);
    Instantiate(enemy, spawnPosition, Quaternion.identity);
    yield return new WaitForSeconds(spawnDelay);
    StartCoroutine(SpawnEnemy());
}
  

}
Поскольку мой код использует StopAllCoroutines для остановки создателя, я не могу использовать сопрограммы для установки другой задержки для затухания. Однако я попытался с помощью invoke установить задержку для функции, которая переводит сцены, но по какой-то причине это не работает. Спасибо за любые предложения, я пытался работать над этим в течение 2 часов.

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

1. проверьте, вызывается ли метод GoToScene() , и удалите его из обновления, где он вызывается несколько раз, а не только 1.

2. И почему бы вам тогда не остановить только одну сопрограмму для spawn?

3. Сначала я пытался использовать это, но это никогда не срабатывало, поэтому я решил обойти это

Ответ №1:

Вы вызываете GoToScene в цикле обновления. Попробуйте либо создать отдельный таймер, который управляется в вашем цикле обновления (не используя метод Invoke). Или создайте логический флаг, чтобы вызывать GoToScenes только один раз в вашем методе Invoke.

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

1. Я объединил ваше решение и решение Дэниела. Я создал условный таймер, который описан ниже, используя аспекты функции обновления ‘ if (timeToLoadScene &&t; 0) {timeToLoadScene -= Time.deltaTime; } else { SceneMana&er. LoadScene(«MainMenu»); } ‘

Ответ №2:

Как я прокомментировал выше, я использовал условный оператор, который был намного более простым кодом и использовал простой таймер. `if (timeToLoadScene &&t; 0) { timeToLoadScene -= Time.deltaTime; } else { SceneMana&er.LoadScene(«MainMenu»);

         }`