经过一小段延迟后,是否可以加载场景?

问题描述

我目前正在开发一款自上而下的ARPG游戏,该游戏涉及一个协程,该协程具有生成器功能,可以在生成之间延迟。但是,当您击败该关卡时,我已将其设置为停止协程,以使敌人停止生成。然后它退回到主场景。但是我的代码消失了,但是并没有结束

[SerializeField]
private float spawnDelay = 0,spawnTimerLength = 0;
[SerializeField]
private float lowSpawnX = 0,highSpawnX = 0,lowSpawnY = 0,highSpawnY = 0;
public GameObject enemy;
float timeToLoadScene = 10f;
// Start is called before the first frame update
void Start()
{
    StartCoroutine("SpawnEnemy");        
}
void Update()
{
    if (spawnTimerLength > 0)
    {
        spawnTimerLength -= Time.deltaTime;
    }
    else
    {
        StopAllCoroutines();
        Player.instance.gameObject.SetActive(false);
        UIController.instance.pauseButton.SetActive(false);
        UIController.instance.healthImage.SetActive(false);
        UIController.instance.hpbarImage.SetActive(false);
        UIController.instance.StartFadeToBlack();
        Invoke("GoToScene",timeToLoadScene);
    }
}
void GoToScene()
{
    SceneManager.LoadScene("MainMenu");
}
IEnumerator SpawnEnemy()
{
    float SpawnPointX = Random.Range(lowSpawnX,highSpawnX);
    float SpawnPointY = Random.Range(lowSpawnY,highSpawnY);
    Vector3 spawnPosition = new Vector3(SpawnPointX,SpawnPointY,0);
    Instantiate(enemy,spawnPosition,Quaternion.identity);
    yield return new WaitForSeconds(spawnDelay);
    StartCoroutine(SpawnEnemy());
}

} 由于我的代码使用StopAllCoroutines来停止生成器,因此我无法使用协程来为淡入淡出设置另一个延迟。但是,我尝试使用invoke在过渡场景的函数上设置延迟,但是由于某些原因,该延迟不起作用。谢谢您的任何建议,我已经尝试了2个小时。

解决方法

您正在更新循环中调用GoToScene。尝试创建在更新循环中进行管理的单独计时器(不使用Invoke方法)。或创建一个布尔标志,仅在您的Invoke方法中调用一次GoToScenes。

,

正如我在上面评论的那样,我使用了一个条件语句,该条件语句要简单得多,并且使用了一个简单的计时器。 `if(timeToLoadScene> 0) { timeToLoadScene-= Time.deltaTime; } 其他 { SceneManager.LoadScene(“ MainMenu”);

        }`

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...