UnityWebRequestAsync学习笔记
请大家关注我的微博:@NormanLin_BadPixel坏像素
我们看到,其实这是一个用异步方法调用UnityWebRequest的东西。至于UnityWebRequest是什么东西,大家可以去看看官方文档,如果官方文档看不懂怎么用,那么就去百度谷歌吧。
public Task<bool> DownloadAsync(string url)
{
this.tcs = new TaskCompletionSource<bool>();
url = url.Replace(" ", "%20");
this.Request = UnityWebRequest.Get(url);
this.Request.Send();
return this.tcs.Task;
}
当开始传入一个地址,让我们从该地址下载数据时,我们就创建了一个Task。需要注意的是,url地址是不能包含空格的,所以,我们需要把地址序列化一下,而”%20”就是序列化后的空格符。
我们看官方的例子里是在协程里等待下载完成的,这里我们用到了异步的方式,那么,我们是在哪里结束这个任务呢?
public void Update()
{
if (this.isCancel)
{
this.tcs.SetResult(false);
return;
}
if (!this.Request.isDone)
{
return;
}
if (!string.IsNullOrEmpty(this.Request.error))
{
this.tcs.SetException(new Exception($"request error: {this.Request.error}"));
return;
}
this.tcs.SetResult(true);
}
我们在添加这个组件的时候就已经注册了Update事件,所以这个会在每次系统调用Update的时候执行。我们看到,每次执行的时候会判断UnityWebRequest是否已经完成了,或者被取消了,或者出错了。当UnityWebRequest正常完成的时候,也就是我们任务完成的时候。this.tcs.SetResult(true)。