#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»);
}`