如何在 Unity3d 协程中获取 return 值(int)?
How can i get return value(int) in Unity3d coroutine?
如何在协程中获取return值?
但是,getElapseSecond() 函数不应该在协程内。
WWW www;
public IEnumerator requestNowTime()
{
www = new WWW(url);
yield return www;
}
public IEnumerator getNowTime()
{
yield return StartCoroutine(requestNowTime());
}
public int getElapseSecond()
{
StartCoroutine(getNowTime());
// You are trying to load data from a www stream which has not completed the download yet.
int totalSeconds = 0;
DateTime dt = Convert.ToDateTime(www.text);
TimeSpan compareTime = dt - Convert.ToDateTime(getTime());
totalSeconds = (int)compareTime.TotalSeconds;
return totalSeconds; //0
}
您不能简单地等待正常函数中协程的结果,除非您希望您的游戏冻结,直到您通过使用 while 循环等得到答案。
我可以建议您采用以下策略:使用回调。回调是当前 function/coroutine 完成工作时将调用的函数。在 requestNowTime
中收到 WWW
参数后,调用将计算经过时间的函数。在同一个函数中,当你完成计算时,使用一个回调函数,它是原始调用者的函数,它将能够首先按预期使用结果。
WWW www;
// Call this function to start the computing process
public void ProcessElapsedSeconds(Action functionToCallWhenDone)
{
StartCoroutine(requestNowTime(functionToCallWhenDone));
}
public IEnumerator requestNowTime(Action callback)
{
www = new WWW(url);
OnTimeReceived(www, functionToCallWhenDone);
}
void OnTimeReceived(WWW www, Action functionToCallWhenDone)
{
int totalSeconds = 0;
DateTime dt = Convert.ToDateTime(www.text);
TimeSpan compareTime = dt - Convert.ToDateTime(getTime());
totalSeconds = (int)compareTime.TotalSeconds;
functionToCallWhenDone(totalSeconds);
}
如何在协程中获取return值? 但是,getElapseSecond() 函数不应该在协程内。
WWW www;
public IEnumerator requestNowTime()
{
www = new WWW(url);
yield return www;
}
public IEnumerator getNowTime()
{
yield return StartCoroutine(requestNowTime());
}
public int getElapseSecond()
{
StartCoroutine(getNowTime());
// You are trying to load data from a www stream which has not completed the download yet.
int totalSeconds = 0;
DateTime dt = Convert.ToDateTime(www.text);
TimeSpan compareTime = dt - Convert.ToDateTime(getTime());
totalSeconds = (int)compareTime.TotalSeconds;
return totalSeconds; //0
}
您不能简单地等待正常函数中协程的结果,除非您希望您的游戏冻结,直到您通过使用 while 循环等得到答案。
我可以建议您采用以下策略:使用回调。回调是当前 function/coroutine 完成工作时将调用的函数。在 requestNowTime
中收到 WWW
参数后,调用将计算经过时间的函数。在同一个函数中,当你完成计算时,使用一个回调函数,它是原始调用者的函数,它将能够首先按预期使用结果。
WWW www;
// Call this function to start the computing process
public void ProcessElapsedSeconds(Action functionToCallWhenDone)
{
StartCoroutine(requestNowTime(functionToCallWhenDone));
}
public IEnumerator requestNowTime(Action callback)
{
www = new WWW(url);
OnTimeReceived(www, functionToCallWhenDone);
}
void OnTimeReceived(WWW www, Action functionToCallWhenDone)
{
int totalSeconds = 0;
DateTime dt = Convert.ToDateTime(www.text);
TimeSpan compareTime = dt - Convert.ToDateTime(getTime());
totalSeconds = (int)compareTime.TotalSeconds;
functionToCallWhenDone(totalSeconds);
}