【发布时间】:2020-02-01 01:18:29
【问题描述】:
我有一个协程,它下载视频,将其写入内存,然后播放。
IEnumerator DownloadVideo(string url) {
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();
byte[] result = www.downloadHandler.data;
File.WriteAllBytes(path, result);
StartCoroutine(PlayVideo(path, 3));
}
IEnumerator PlayVideo(string url, float delayTime = 0) {
yield return new WaitForSeconds(delayTime);
player.url = url;
player.Prepare();
while (!player.isPrepared) yield return null;
player.Play();
}
问题是我必须在PlayVideo协程中设置这个参数delayTime,因为File.WriteAllBytes(path, result)需要一段时间才能完成,如果我立即开始播放视频,它将无法正确播放。
问题很简单:在协程DownloadVideo中,如何才能等到File.WriteAllBytes(path, result)完成调用StartCoroutine(PlayVideo(path))?
【问题讨论】:
-
先等视频下载完毕。视频 id 下载完成后,启用播放视频
-
顺便说一句,没有理由在协程中调用
StartCoroutine。你可以yield return PlayVideo(...)