Unity-资源异步加载

Unity-资源异步加载_第1张图片

 知识点一  Resources异步加载是什么

Unity-资源异步加载_第2张图片

 知识点二 Resources异步加载方法

Unity-资源异步加载_第3张图片

 1、通过异步加载中的完成事件监听 使用加载的资源

Unity-资源异步加载_第4张图片

 当我们使用Resources的LoadAsdync函数进行异步加载文件时,如果我们只是做到这一步,那么运行起来是没有任何效果的。这里完成的仅仅只是将配置环境、数据加载。这里就有一个问题了,我们如果知道它是否加载完毕?

看一下它的返回类型是一个ResourcesRequest类型,进入内部:

Unity-资源异步加载_第5张图片

它的基类AsyncOperation,有一个事件,completed

Unity-资源异步加载_第6张图片

 当加载完成后,这个函数会调用completed事件,通知外部加载完毕了。我们可以通过监听这个事件去检测加载是否完成。给completed事件加一个新的委托,当加载完成时系统调用completed,执行LoadOver(AsyncOperation rq)。打印加载结束。

Unity-资源异步加载_第7张图片

 加载完成图片,我们需要使用它。我们在OnGUI中去使用。

Unity-资源异步加载_第8张图片注意这个判断是否为null,异步加载是需要一定时间去加载文件的。不是马上就完成加载。因此要做出一个条件判断。

什么时候将资源实例化呢?

Unity-资源异步加载_第9张图片

 当异步加载完成时,asset这个公共属性会得到加载的资源。我们通过调用asset来得到里面的内容。

注意这里需要两次as 转换

第一次as: 因为asset是ResourcesRequest的属性。所以将AsyncOperation转为ResourcesRequest

第二次as:asset返回的是Object类型,我们要用Texture去接收。所以是Object转Texture;

Unity-资源异步加载_第10张图片

Unity-资源异步加载_第11张图片

Unity-资源异步加载_第12张图片

 2、通过协程使用加载的资源

首先创建一个协程:

Unity-资源异步加载_第13张图片

 yield return 会返回一些特点的内容。将rq作为yield return的返回值。

Unity-资源异步加载_第14张图片

 ResourcesRequest基类为AsyncOperationUnity-资源异步加载_第15张图片

 AsyncOperation为YieldInstryctionUnity-资源异步加载_第16张图片

WaitForSeconds基类也是YieldInstryction。

Unity-资源异步加载_第17张图片

 证明ResourcesRequest 也是和协程有关系的。

Unity-资源异步加载_第18张图片

 当资源加载完,才会执行后面的代码。资源加载完后,将图片实例化。

Unity-资源异步加载_第19张图片

 测试:

Unity-资源异步加载_第20张图片

 属性的使用。Unity-资源异步加载_第21张图片

 以上的两种方法,无论是通过时间completed还是通过协程,主要都是解决的一个问题,文件是否加载完成?因为我那么只有当文件加载完成,才能进行实例化。而第一种方法,是使用completed来完成加载完成实例化,第二种则是系统帮助我们完成了是否加载完成判断。

Unity-资源异步加载_第22张图片

 

你可能感兴趣的:(Unity,unity,游戏引擎)