我正在尝试为我的应用程序重新配置脚本,并使用Unity3d的新更新版本,看来StartCoroutine
需要停止功能,不确定是否在何处放置功能。</ p>
我一直在努力寻找如何添加if语句来停止协程并修复致命错误的方法。
我尝试在StartCoroutine之后添加StopAllCoroutines,如下所示:
void Start()
{
StartCoroutine(GetText());
StopAllCoroutines();
}
这是完整的GET-API脚本:
void Start()
{
StartCoroutine(GetText());
StopAllCoroutines();
}
IEnumerator GetText()
{
UnityWebRequest www = UnityWebRequest.Get(json);
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
// Show results as text
string myText = www.downloadHandler.text;
var rate = (double)JToken.Parse(myText).SelectToken("bpi.USD.rate");
var rate2 = 1 / rate;
//response Text.text = rate2.ToString();
mText = GetComponent<TextMeshPro>();
mText.text = "BTC: " + rate2.ToString("0.########");
}
}
private void Update()
{
Start();
}
致命错误:协同程序继续失败
答案 0 :(得分:1)
您每帧都将启动一个新的协程,这几乎可以肯定是一个问题(如果没有别的可能会破坏性能)。
您还将告诉协程启动后立即停止,因此您绝对不会超过协程的第一个产量。
通常使用协程时,如果您希望随时仅运行一个协程的活动实例,则应保留StartCoroutine返回的引用,并在该引用上调用StopCoroutine,如下所示:
Coroutine Routine = null;
void Example()
{
if (Routine != null)
{
StopCoroutine(Routine);
}
Routine = StartCoroutine(ExampleCoroutine());
}
IEnumerator ExampleCoroutine()
{
// do coroutine
// end coroutine with:
Routine = null;
}
确保调用StopCoroutine的Monobehaviour与调用StartCoroutine的Monobehaviour相同。不这样做可能是您提到的错误的最常见原因。