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.