协程在我的 API 脚本中继续失败

亚当

我正在尝试为我的应用程序重新配置一个脚本,并使用新的 Unity3d 更新版本,似乎StartCoroutine需要一个停止功能,不确定在哪里放置功能。

我一直在想如何添加一个 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();
}

致命错误:协程继续失败

沉默韦伯

您每帧都会启动一个新的协程,这几乎肯定是一个问题(如果没有其他问题,它可能会破坏性能)。

您还告诉协程在启动后立即停止,因此您绝对不会超过协程的第一个产量。

一般使用协程时,如果您打算在任何时候只运行协程的一个实时实例,您应该保留 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 相同。不这样做可能是您提到的错误的最常见原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章