c# - 为什么协程停止工作/执行

标签 c# unity-game-engine timer countdown coroutine

我有一个 3 秒倒计时器,当游戏取消暂停时会激活该计时器。 几天前我还可以正常工作,但现在它不再工作了。它在号码 3 上被阻止。这是代码:

IEnumerator Timer() {

    Time.timeScale = 0;

    objectWithGSScript.scoreText.fontSize = 300;

    objectWithGSScript.scoreText.text = "" + 3;
    yield return WaitOneSecond();

    objectWithGSScript.scoreText.text = "" + 2;
    yield return WaitOneSecond();

    objectWithGSScript.scoreText.text = "" + 1;
    yield return WaitOneSecond();

    objectWithGSScript.scoreText.text = "Go!";
    yield return WaitOneSecond();

    Time.timeScale = 1f;

    objectWithGSScript.scoreText.text = objectWithGSScript.score.ToString();

}

IEnumerator WaitOneSecond() {
    float start = Time.realtimeSinceStartup;
    while (Time.realtimeSinceStartup < start + 1f) {
        print("entered");
        yield return null;
    }
}

它只打印一次“entered”,看起来它从协程中退出,就像它永远返回 null 一样。

可能是什么问题?

如有任何帮助,我们将不胜感激。

最佳答案

您代码中的函数非常好。不,它不会也不应该停在数字 3 处。

这些是它表现得好像停在数字 3 处的可能原因。

1。您正在调用 StopCoroutineStopAllCoroutines。请检查您是否没有停止协程。如果你在它运行时,它就会这样。

2。您正在破坏脚本或该脚本所附加的游戏对象。检查您调用 Destroy(gameObject);Destroy(this); 或类似内容的位置。如果脚本被破坏,协程应该停止运行。

请记住,您可以从另一个脚本中销毁一个脚本,因此请检查所有脚本。

3。您禁用了他的脚本附加到的游戏对象。当您禁用游戏对象时,协程将停止工作。检查您是否没有 gameObject.SetActive(false); 或任何带有 SetActive(false); 的内容来禁用该 GameObject。

4。如果您在ScriptA中有一个协程函数,然后从ScriptB启动该协程,如果您销毁ScriptBScriptA 中的协程将卡住在yield return 语句处。了解这一点很重要。

5。空问题...

也许objectWithGSScript.scoreText.text不是null。您必须检查每个变量并确保它们不为nullif 语句很好,但一个好的快捷方式是:

UnityEngine.Debug.Log(objectWithGSScript);
UnityEngine.Debug.Log(objectWithGSScript.scoreText);
UnityEngine.Debug.Log(objectWithGSScript.scoreText.text);

那么你可以这样做:

objectWithGSScript.scoreText.fontSize = 300;
objectWithGSScript.scoreText.text = "" + 3;

我想不出发生这种情况的任何其他可能原因,但请检查上面提到的所有这五件事。

关于c# - 为什么协程停止工作/执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43170554/

相关文章:

ios - 快速按下主页按钮时暂停计时器

c# - OrderBy 自定义比较器数字前的特定字母

C# .NET 相当于 PHP time()

c# - 尽管碰撞器和代码正确,但 Unity 中的对象不会触发

android - 构建播放器时出错 : CommandInvokationFailure: Failed to re-package resources. 有关详细信息,请参阅控制台

java - 如何在 Android 中使用计时器?

python - 在 VS Code 终端中显示耗时

c# - 除去除数字外的所有内容的正则表达式是什么?

c# - XNA RenderTarget 保留内容

unity-game-engine - 暂停 Unity3D 中静态场景的 FPS/CPU 使用率以进行跨平台开发