我正在开发一些飞行模拟器程序。现在,我正在尝试让该级别在延迟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之前销毁运行协程的游戏对象。销毁被推迟到帧的末尾,这样代码才能执行直到成品率,但是随后GameObject&MonoBehaviour将被销毁,协程也随之销毁。
解决方案:在关卡结束和重启之间持续存在的对象上使用协程。为了使对象即使在加载关卡时仍然持久(如在代码中所做的那样),您需要调用DontDestroyOnLoad。
关于c# - Unity-WaitForSeconds()不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29552235/