首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我的API脚本中的协程继续失败

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

Stack Overflow用户
提问于 2019-05-17 05:05:08
回答 1查看 2.2K关注 0票数 0

我正在尝试为我的应用程序重新配置脚本,在新的Unity3d更新版本中,StartCoroutine似乎需要一个停止函数,但不确定该将函数放在哪里。

我被困在如何添加if语句来停止协程并修复致命错误的问题上。

我尝试在StartCoroutine之后添加StopAllCoroutines,如下所示:

代码语言:javascript
复制
void Start()
{
    StartCoroutine(GetText());
    StopAllCoroutines();
}

下面是完整的GET-API脚本:

代码语言:javascript
复制
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();
}

致命错误:协程继续失败

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-17 06:20:59

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

你还会告诉协程在启动后立即停止,所以你肯定永远不会超过协程的第一个产量。

通常使用协程时,如果您希望在任何时候只运行协程的一个活动实例,则应该保留由StartCoroutine返回的引用,并对该引用调用StopCoroutine,如下所示:

代码语言:javascript
复制
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相同。不这样做可能是您提到的错误的最常见原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56176626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档