C#/Unity - 从 UnityWebRequest 协程返回检索到的字符串
C#/Unity - Returning the retrieved string from a UnityWebRequest coroutine
我如何 return 协程中的 'data' 变量到验证子例程中的变量?我已经尝试正常 returning,使其成为一个全局变量,回调,我似乎无法使其工作......非常感谢一些帮助
PICTURE
由于协程/网络请求 运行 是异步的,因此您无法正常从它们获取 return 值(因为程序的其余部分在完成之前不会停止,所以由时间有一个 return 值你的程序可以在你的代码中的任何地方)。您可以让他们更新一些共享变量,然后检查 Update() 中的每一帧是否完成,并在完成后使用该共享变量。
但是从协程获取变量的更好更简洁的方法是使用 callbacks。这意味着您将一个参数传递给协程,这是一个您想要 运行 结果的方法,协程将在完成后立即调用该方法。
查看此示例,了解如何将回调与网络请求协程一起使用:
private void Start() {
StartCoroutine(DoWebRequest("http://www.whosebug.com", ParseWebResult));
}
private void ParseWebResult(string resultText) {
Debug.Log("Result of web request: " + resultText);
}
private IEnumerator DoWebRequest(string url, System.Action<string> callback) {
using (UnityWebRequest wr = UnityWebRequest.Get(url)) {
// Request and wait for the desired page.
yield return wr.SendWebRequest();
isWrDone = true;
if (wr.isNetworkError) {
Debug.LogError("Error getting www data: " + wr.error);
} else {
callback(wr.downloadHandler.text);
}
}
}
在此示例中,您将两个参数传递给协程 - URL 和一个将处理结果的方法。然后在 Start()
中,我启动了这个协程,并将 url 作为参数传递给它,并将处理结果的 ParseWebResult()
方法传递给它。
ParseWebResult
方法接收一个字符串(web请求的结果)并打印到日志中。这是您自己的代码应该去的地方,以正确处理结果。
您也可以使用内联 lambda 而不是定义单独的消息来处理结果:
private void Start() {
StartCoroutine(DoWebRequest("http://www.whosebug.com", (string result) => {
Debug.Log("Result of web request: " + resultText);
}));
}
在这个例子中,我使用 lambda 语法来定义内联 WWW 处理程序。你可以 read more about the lambda here.
我如何 return 协程中的 'data' 变量到验证子例程中的变量?我已经尝试正常 returning,使其成为一个全局变量,回调,我似乎无法使其工作......非常感谢一些帮助
PICTURE
由于协程/网络请求 运行 是异步的,因此您无法正常从它们获取 return 值(因为程序的其余部分在完成之前不会停止,所以由时间有一个 return 值你的程序可以在你的代码中的任何地方)。您可以让他们更新一些共享变量,然后检查 Update() 中的每一帧是否完成,并在完成后使用该共享变量。
但是从协程获取变量的更好更简洁的方法是使用 callbacks。这意味着您将一个参数传递给协程,这是一个您想要 运行 结果的方法,协程将在完成后立即调用该方法。
查看此示例,了解如何将回调与网络请求协程一起使用:
private void Start() {
StartCoroutine(DoWebRequest("http://www.whosebug.com", ParseWebResult));
}
private void ParseWebResult(string resultText) {
Debug.Log("Result of web request: " + resultText);
}
private IEnumerator DoWebRequest(string url, System.Action<string> callback) {
using (UnityWebRequest wr = UnityWebRequest.Get(url)) {
// Request and wait for the desired page.
yield return wr.SendWebRequest();
isWrDone = true;
if (wr.isNetworkError) {
Debug.LogError("Error getting www data: " + wr.error);
} else {
callback(wr.downloadHandler.text);
}
}
}
在此示例中,您将两个参数传递给协程 - URL 和一个将处理结果的方法。然后在 Start()
中,我启动了这个协程,并将 url 作为参数传递给它,并将处理结果的 ParseWebResult()
方法传递给它。
ParseWebResult
方法接收一个字符串(web请求的结果)并打印到日志中。这是您自己的代码应该去的地方,以正确处理结果。
您也可以使用内联 lambda 而不是定义单独的消息来处理结果:
private void Start() {
StartCoroutine(DoWebRequest("http://www.whosebug.com", (string result) => {
Debug.Log("Result of web request: " + resultText);
}));
}
在这个例子中,我使用 lambda 语法来定义内联 WWW 处理程序。你可以 read more about the lambda here.