首页 > 解决方案 > 如何在运行某些特定代码之前等待

问题描述

我在 C# 中使用统一,并希望让玩家在输掉之后继续移动一段时间,然后才重新加载场景。我试过了:

{
    if (inf.collider.tag == "Obstacle") {
        movement.enabled = false;
        Camera.enabled = false;
        System.Threading.Thread.Sleep(1000);
        SceneManager.LoadScene("Level");
    }
}

但问题是,当它到达睡眠线时,整个游戏和物理都会释放。SceneManager.LoadScene("Level")如果不冻结所有进程,我将如何等待执行?

标签: c#unity3d

解决方案


您应该尝试使用协程 https://docs.unity3d.com/ScriptReference/MonoBehaviour.StartCoroutine.html

using System.Collections;
//....
{
  if (inf.collider.tag == "Obstacle") 
  {
    movement.enabled = false;
    Camera.enabled = false;
    StartCoroutine(LoadSceneAfterTime(1));
  }
//....
}
private IEnumerator LoadSceneAfterTime(float waitTime)
{
       yield return new WaitForSeconds(waitTime);
       SceneManager.LoadScene("Level");
}

推荐阅读