c# - Unity - WaitForSeconds() 不起作用

标签 c# unity3d

我正在开发一些飞行模拟器程序。现在我正试图让关卡在延迟 4 秒后重新启动,但它一直在等待并且没有响应。这是我现在的代码(在 C# 中):

void Update () {

    //other irrelevant code in front

    float TerrainHeightLocation = Terrain.activeTerrain.SampleHeight (transform.position);

    if (TerrainHeightLocation > transform.position.y) { //the plane crashed

        StartCoroutine(Wait(TerrainHeightLocation));


    }
}

IEnumerator Wait( float TerrainHeightLocation) {
    transform.position = new Vector3 (transform.position.x,
                                      TerrainHeightLocation,
                                      transform.position.z);
    Instantiate(explosion, transform.position, transform.rotation);
    Destroy(gameObject);

    Debug.Log ("Waiting");
    yield return new WaitForSeconds(4.0f); // waits x seconds

    Debug.Log ("Waited for x seconds");

    Application.LoadLevel(Application.loadedLevel);
    Debug.Log ("Reloaded level");

}

如果有人能在代码中找到问题,那将是一个很大的帮助,因为我已经尝试了一整天,但我无法修复它。

谢谢!

最佳答案

通常,当 WaitForSeconds 不起作用时,它是以下两件事之一:

  • Time.timeScale 设置为 0。
  • 在时间结束之前,该对象正在被销毁或处于非事件状态。

  • 在您的情况下,您正在销毁运行协程的游戏对象,然后再调用 yield WaitForSeconds。 Destroy 被推迟到帧结束,因此直到 yield 的代码将执行,但随后 GameObject 和 MonoBehaviour 以及 Coroutine 将被销毁。

    解决方案:在关卡结束和重新启动之间持续存在的对象上使用协程。要使对象即使在加载关卡时仍然存在(正如您在代码中所做的那样),您需要调用 DontDestroyOnLoad .

    关于c# - Unity - WaitForSeconds() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552235/

    相关文章:

    c# - 从服务器加载时使 Texture2D 在 Unity 中可读

    c# - Html.Grid 找不到明显存在的模型属性

    c# - 仅用循环比较两个数组

    c++ - DLLNotFoundException异常

    C# 如何在不阻塞程序的情况下创建函数/方法等待 (Unity)

    c# - Unity3D:如何控制生成器,等待波完成时不会停止实例化

    java - 去除Unity制作的Android应用启动时的白屏和黑屏

    c# - 为什么我在使用 DPAPI 加密时得到不同的输出?

    c# - 从 JSON 字符串中获取 C#-Object-Array

    c# - 创建我自己的 "LINQ"扩展方法