gpt4 book ai didi

c# - unity WaitForSeconds 等待时间超过预期

转载 作者:太空宇宙 更新时间:2023-11-03 21:19:27 25 4
gpt4 key购买 nike

当我完成关卡时,它必须显示“关卡已完成!”文本并等待 5 秒然后开始下一关。

private void showSuccess() {
levelCompleted.SetActive (true);
StartCoroutine("waitForNextLevel");
}

IEnumerator waitForNextLevel() {
Debug.Log ("Start time: " + Time.time);
yield return new WaitForSeconds (5);
Debug.Log ("End time: " + Time.time);
prepareTheLevel ();
}

然而文字出现成功,游戏等待5秒,文字消失。然后再等待 5 秒并开始下一个级别。

我希望它只等待 5 秒而不隐藏文本。

有什么想法吗?

最佳答案

听起来你有一些类似的东西:

if (playerScore > winScore)
showSuccess();

在某处的游戏对象上。

如果是这种情况,每帧都会调用 showSuccess,并且每次它都会创建一个新协程,在 5 秒内开始下一关。当第一个完成时,关卡被销毁(删除文本)并且下一个关卡开始加载 - 但是你有 5 秒的协程堆积起来,所以大致每一帧它都会再次调用 prepareTheLevel 直到你用完了活跃的协程。

你用 bool 来保护它的解决方案非常接近你应该做的,但忽略了堆积 5 秒协程的潜在问题 - 我建议保护对 StartCoroutine 的调用相反 - 你甚至可以在 levelCompleted 文本上使用 active 标志,即:

private void showSuccess() {
if (levelCompleted.IsActive() == false) {
levelCompleted.SetActive (true);
StartCoroutine("waitForNextLevel");
}
}

这将使第二次调用 showSuccess 将看到 levelCompleted 处于事件状态,并且什么都不做,只剩下一个 waitForNextLevel 随心所欲的协程。

关于c# - unity WaitForSeconds 等待时间超过预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31796836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com