当我们使用Resources的LoadAsdync函数进行异步加载文件时,如果我们只是做到这一步,那么运行起来是没有任何效果的。这里完成的仅仅只是将配置环境、数据加载。这里就有一个问题了,我们如果知道它是否加载完毕?
看一下它的返回类型是一个ResourcesRequest类型,进入内部:
它的基类AsyncOperation,有一个事件,completed
当加载完成后,这个函数会调用completed事件,通知外部加载完毕了。我们可以通过监听这个事件去检测加载是否完成。给completed事件加一个新的委托,当加载完成时系统调用completed,执行LoadOver(AsyncOperation rq)。打印加载结束。
加载完成图片,我们需要使用它。我们在OnGUI中去使用。
注意这个判断是否为null,异步加载是需要一定时间去加载文件的。不是马上就完成加载。因此要做出一个条件判断。
什么时候将资源实例化呢?
当异步加载完成时,asset这个公共属性会得到加载的资源。我们通过调用asset来得到里面的内容。
注意这里需要两次as 转换
第一次as: 因为asset是ResourcesRequest的属性。所以将AsyncOperation转为ResourcesRequest
第二次as:asset返回的是Object类型,我们要用Texture去接收。所以是Object转Texture;
首先创建一个协程:
yield return 会返回一些特点的内容。将rq作为yield return的返回值。
ResourcesRequest基类为AsyncOperation
AsyncOperation为YieldInstryction
WaitForSeconds基类也是YieldInstryction。
证明ResourcesRequest 也是和协程有关系的。
当资源加载完,才会执行后面的代码。资源加载完后,将图片实例化。
测试:
属性的使用。
以上的两种方法,无论是通过时间completed还是通过协程,主要都是解决的一个问题,文件是否加载完成?因为我那么只有当文件加载完成,才能进行实例化。而第一种方法,是使用completed来完成加载完成实例化,第二种则是系统帮助我们完成了是否加载完成判断。