如何使用Coroutine中的值或告诉它什么时候完成

时间:2017-01-03 14:11:18

标签: unity3d

例如,在使用WWW类调用Web API时,我想要返回一个值,或者对它何时完成及其状态提供一些反馈。

1 个答案:

答案 0 :(得分:1)

那么,我,让我告诉我一个巧妙的做法!

这里我们创建一个IEnumerator,它接受一个Action(在我们的例子中是方法)作为参数,并在我们的WWW完成时调用它:

    public static IEnumerator GetSomething(Action<string> callback)
    {
        // The www-stuff isn't really important to what I wish to mediate
        WWWForm wwwForm = new WWWForm();
        wwwForm.AddField("select", "something");
        WWW www = new WWW(URL, wwwForm);
        yield return www;

        if (www.error == null)
        {
            callback(www.text);
        }
        else
        {
            callback("Error");
        }
    }

这就是我们使用它的方式:

StartCoroutine(
    GetSomething((text) => 
    {
        if (text != "Error")
        {
            // Do something with the text you got from the WWW
        }
        else
        {
            // Handle the error
        }
    })
);

我们发送的参数是(text),这是一个无名声明的方法。我们称之为&#34;回调&#34;在IEnumerator中它可以被称为任何东西,重要的是它调用我们在调用方法GetSomething的参数中声明的方法。