协同程序为何停止工作/执行
我有一个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; } }
它只打印“输入”一次,它似乎从协程退出,就像它永远返回null一样。
可能是什么问题呢?
任何帮助,将不胜感激。
代码中的函数非常好。 不,它不会也不应该停在3号位置。
这些可能是因为它在3号位置被停止的原因。
1.您正在调用StopCoroutine
或StopAllCoroutines
。 请检查您是否没有停止协同程序。 如果您在运行时,它将以这种方式运行。
2.您正在销毁此脚本附加到的脚本或GameObject。 检查你在哪里调用Destroy(gameObject);
, Destroy(this);
或类似的东西。 如果脚本被销毁,则协程应该停止运行。
请记住,您可以从另一个脚本中销毁脚本,因此请检查所有脚本。
3 .。您禁用了脚本附加到的GameObject。 当您禁用GameObject时,协程停止工作。 检查你没有gameObject.SetActive(false);
或任何有SetActive(false);
东西SetActive(false);
禁用该GameObject。
4.如果你在ScriptA中有一个协同程序函数,然后从ScriptB启动该协程,如果你破坏ScriptB , ScriptA中的协同程序将冻结在yield return语句中。 你知道这一点很重要。
5 。 空问题……
也许objectWithGSScript.scoreText.text
不为null
。 您必须检查每个变量并确保它们不为null
。 if
stametement很好,但这是一个很好的捷径:
UnityEngine.Debug.Log(objectWithGSScript); UnityEngine.Debug.Log(objectWithGSScript.scoreText); UnityEngine.Debug.Log(objectWithGSScript.scoreText.text);
然后你可以这样做:
objectWithGSScript.scoreText.fontSize = 300; objectWithGSScript.scoreText.text = "" + 3;
我想不出为什么会发生这种情况的任何其他可能的原因,但检查上面提到的所有这五件事。
上述就是C#学习教程:协同程序为何停止工作/执行分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1018121.html