如果我打了一個WWW電話,它需要幾秒鐘的回覆,不會遊戲凍結? 不,遊戲不會freez試試這個代碼,你會看到日誌「corou」後會立即顯示圖片下載。
public class WWWDemo : MonoBehaviour {
bool b = true;
// Use this for initialization
void Start() {
}
// Update is called once per frame
void Update()
{
if (b) {
StartCoroutine(ExampleCoroutine());
Debug.LogWarning("after corou");
}
}
IEnumerator ExampleCoroutine()
{
b = false;
Debug.Log("Time : " + DateTime.Now);
string url = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";
WWW www = new WWW(url);
yield return www;
Debug.Log("Time : " + DateTime.Now);
Renderer render = gameObject.GetComponent<Renderer>();
render.material.mainTexture = www.texture;
Debug.Log("Time : " + DateTime.Now);
}
}
但下一行的執行將產生回報WWW的語句將等待unitl圖片下載後明確停止,而統一其餘的事件將執行異步。
請分別考慮以下示例。開始事件執行它將等待,但更新將連續運行。
IEnumerator Start() {
Debug.Log("Time : " + DateTime.Now);
string url = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg";
WWW www = new WWW(url);
yield return www;
Debug.Log("Time : " + DateTime.Now);
Renderer render = gameObject.GetComponent<Renderer>();
render.material.mainTexture = www.texture;
Debug.Log("Time : " + DateTime.Now);
}
void Update()
{
Debug.Log("update is running while start is waiting for downloading");
}
從這個例子中,我猜測'yield return www;'行異步等待,直到下載頁面。該例中的 –
它只是等待www請求結束(等待發生在「yield return www;」行)。 你也可以使用這個新的webrequest更多的控制:http://docs.unity3d.com/ScriptReference/Experimental.Networking.UnityWebRequest.html – mgear
它是如何知道它是完整的,如果返回是IEnumerator ...沒有什麼以「測試」完成 – Elenesski