有2个c#脚本,附加到同一个游戏对象(Unity 5.4)
public class SignIn : MonoBehaviour
{
private SendRequest sendRequest;
void Start()
{
sendRequest = GetComponent<SendRequest>();
}
public void signInPressed()
{
WWWForm form = new WWWForm();
form.AddField("key", "value");
sendRequest.POST(mainSettings.appUrl, form);
Debug.Log("SIGNIN");
}
}
和
public class SendRequest : MonoBehaviour {
public WWW POST(string url, WWWForm form)
{
WWW www = new WWW(url, form);
StartCoroutine(WaitForRequest(www));
return www;
}
private IEnumerator WaitForRequest(WWW www)
{
yield return www;
if (www.error == null)
{
Debug.Log("WWW Ok!: " + www.text);
}
else
{
Debug.Log("WWW Error: " + www.error);
}
}
}
当我尝试执行这些脚本时,首先显示行SIGNIN,然后显示服务器响应。
如何首先从服务器获取响应,然后继续该程序? 我做错了什么?
答案 0 :(得分:3)
看看这里:
StartCoroutine(WaitForRequest(www));
return www;
您的方法返回www
对象,而不等待WaitForRequest(www)
完成。如果您没有使用从www
方法返回的POST()
,为什么要将其退回。
如何解决这个问题:
在delegate
完成时传递coroutine
参数。
例如:
sendRequest.POST(mainSettings.appUrl, form, () => { Debug.Log("SIGNIN");});
和 POST()
的定义:
public WWW POST(string url, WWWForm form, Action callback = null)
{
WWW www = new WWW(url, form);
StartCoroutine(WaitForRequest(www, callback));
}
和 WaitForRequest()
的定义:
private IEnumerator WaitForRequest(WWW www, Action callback = null)
{
yield return www;
if (www.error == null)
{
Debug.Log("WWW Ok!: " + www.text);
}
else
{
Debug.Log("WWW Error: " + www.error);
}
if(callback != null)
{
callback();
}
}
希望有所帮助