C# 我的API脚本中的协同路由继续失败
我正在尝试为我的应用程序重新配置一个脚本,使用新版本的Unity3d,似乎C# 我的API脚本中的协同路由继续失败,c#,unity3d,C#,Unity3d,我正在尝试为我的应用程序重新配置一个脚本,使用新版本的Unity3d,似乎start例程需要一个停止功能,但不确定该功能放在哪里 我一直在想如何添加一个if语句来停止协同程序并修复致命错误 我尝试在Start例程之后添加StopAllCorroutines,如下所示: void Start() { StartCoroutine(GetText()); StopAllCoroutines(); } 下面是完整的GET-API脚本: void Start() { Start
start例程
需要一个停止功能,但不确定该功能放在哪里
我一直在想如何添加一个if语句来停止协同程序并修复致命错误
我尝试在Start例程之后添加StopAllCorroutines,如下所示:
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();
}
void Start()
{
start例程(GetText());
StopAllCoroutines();
}
IEnumerator GetText()
{
UnityWebRequest www=UnityWebRequest.Get(json);
返回www.SendWebRequest();
如果(www.isNetworkError | | www.isHttpError)
{
Debug.Log(www.error);
}
其他的
{
//将结果显示为文本
字符串myText=www.downloadHandler.text;
var rate=(double)JToken.Parse(myText.SelectToken(“bpi.USD.rate”);
var比率2=1/比率;
//response Text.Text=rate2.ToString();
mText=GetComponent();
mText.text=“BTC:+rate2.ToString”(“0;
}
}
私有void更新()
{
Start();
}
致命错误:协同程序继续失败
每帧都要启动一个新的协同路由,这几乎肯定是一个问题(如果没有其他问题,它可能会破坏性能) 您还告诉协同程序在启动后立即停止,因此您肯定永远不会超过协同程序的第一个收益率 通常使用协同路由时,如果您希望在任何时候只运行一个协同路由的活动实例,则应保留Start例程返回的引用,并对该引用调用StopCorroutine,如下所示:
Coroutine Routine = null;
void Example()
{
if (Routine != null)
{
StopCoroutine(Routine);
}
Routine = StartCoroutine(ExampleCoroutine());
}
IEnumerator ExampleCoroutine()
{
// do coroutine
// end coroutine with:
Routine = null;
}
确保调用StopCorroutine的MonoBehavior与调用StartRoutine的MonoBehavior相同。不这样做可能是您提到的错误的最常见原因。为什么在启动协同程序后立即停止它?您正在每
更新一帧启动/停止协同路由,我认为您不希望这样。我想不出任何其他方法来修复Unity中的协同路由继续错误。当我在播放模式下运行应用程序时,即使在我停止播放模式后,协同程序仍会继续运行。我添加了您提供的代码,并做了一些更改。现在,当我在播放模式下运行时,我收到了这个错误:还有什么我可以做的吗?-你在每一帧抛出一个NotImplementedException(如果在场景中的启用对象上,则在每一帧调用MonoBehavior的更新方法)。-例如,协同程序实际上并不像您编写的那样是一个协同程序。协同程序应该是返回IEnumerator而不是属性的方法。-从未调用GetText()。你不想在某个时候运行协同程序吗Example()似乎也没有在任何地方被调用至于抛出NullReferenceException的是什么,它似乎与该文件没有任何关系。