在上一篇我们了解了 Res Kit 的一些背后设计原理,讲解了一些概念,比如:开发阶段、真机阶段等。

在这一篇,我们回到 Res Kit 使用细节上。

在 Res Kit 的第一篇,我们介绍了 Res Kit 的基本使用,代码如下:

  1. using QF.Res;
  2. using QF.Extensions;
  3. using UnityEngine;
  4. namespace QF.Example
  5. {
  6. public class TestResKit : MonoBehaviour
  7. {
  8. void Awake ()
  9. {
  10. // 全局只需初始化一次
  11. ResMgr.Init ();
  12. }
  13. /// <summary>
  14. /// 每一个需要加载资源的单元(脚本、界面)申请一个 ResLoader
  15. /// ResLoader 本身会记录该脚本加载过的资源
  16. /// </summary>
  17. /// <returns></returns>
  18. ResLoader mResLoader = ResLoader.Allocate ();
  19. void Start ()
  20. {
  21. // 通过 LoadSync 同步加载资源
  22. // 只需要传入资源名即可,不需要传入 AssetBundle 名。
  23. mResLoader.LoadSync<GameObject> ("TestObj")
  24. .Instantiate ();
  25. }
  26. void OnDestroy()
  27. {
  28. // 释放所有本脚本加载过的资源
  29. // 释放只是释放资源的引用
  30. // 当资源的引用数量为 0 时,会进行真正的资源卸载操作
  31. mResLoader.Recycle2Cache();
  32. mResLoader = null;
  33. }
  34. }
  35. }

我们把目光聚焦到 加载相关的代码,如下:

  1. // 通过 LoadSync 同步加载资源
  2. // 只需要传入资源名即可,不需要传入 AssetBundle 名。
  3. mResLoader.LoadSync<GameObject> ("TestObj")
  4. .Instantiate ();

代码中,我们通过 mResLoader.LoadSync 加载资源,LoadSync 意思是同步加载。有同步加载对应地,就有异步加载。

异步加载

异步加载代码如下:

  1. // 添加到加载队列
  2. mResLoader.Add2Load("TestObj",(succeed,res)=>{
  3. if (succeed)
  4. {
  5. res.Asset.As<GameObject>()
  6. .Instantiate();
  7. }
  8. });
  9. // 执行异步加载
  10. mResLoader.LoadAsync();

与 LoadSync 不同的是,异步加载是分两步的,第一步是添加到加载队列,第二步是执行异步加载。

这样做是为了支持同时异步加载多个资源的。

同时异步加载多个资源

代码如下:

  1. // 添加一个资源
  2. mResLoader.Add2Load("TestObj",(succeed,res)=>{
  3. if (succeed)
  4. {
  5. res.Asset.As<GameObject>()
  6. .Instantiate();
  7. }
  8. });
  9. // 加载一个资源,不处理
  10. mResLoader.Add2Load("TestObj1",(succeed,res)=>{});
  11. // 加载一个列表中的资源
  12. mResLoader.Add2Load(new List<string>(){ "TestObj2","TestObj3","TestObj4"});
  13. // 执行加载操作
  14. mResLoader.LoadAsync(()=>{
  15. // 可以监听所有的资源是否加载成功
  16. "资源加载成功".LogInfo();
  17. });

代码比较简单,考虑了多种加载情况。

此篇的内容就这些。

  • 转载请注明地址:凉鞋的笔记:liangxiegame.com。
  • 任何问题欢迎到 QQ 群:623597263 交流。
  • 更多内容关注微信公众号:liangxiegame

QFramework 使用指南 2020(九):Res Kit(3)异步加载 与 异步队列加载的更多相关文章

  1. QFramework 使用指南 2020(七):Res Kit (1)概述与基本使用

    在上一篇,我们刚刚结束了 脚本生成专题,我们知道 QF 提供了两种脚本生成模式,一种是 ViewController + Bind ,另一种是 UI Kit 模式. 本来打算,介绍完 ViewCont ...

  2. QFramework 使用指南 2020(八):Res Kit(2)模拟模式与非模拟模式

    在上一篇,介绍了 Res Kit 的基本使用,相信大家已经体会到了 Res Kit 的简便之处了. 在这一篇,我们试着探讨一下 Res Kit 的设计背后原理. AssetBundle 的不便之处 在 ...

  3. QFramework 使用指南 2020(二):下载与版本介绍

    目前 QFramework 有两个可供安装的版本 PackageKit:QFramework 的插件平台,可以下载只感兴趣的插件,除了 Framework 模块还有一些 Shader 案例.项目模板. ...

  4. QFramework 使用指南 2020 (一): 概述

    大家好,我是 QFramework 的作者 凉鞋,QFramework 从第一次代码提交到现在快 5 年了,期间陆陆续续增加了很多功能,在使用体验上做了大量的改进. 而市面上关于 QFramework ...

  5. QFramework 使用指南 2020(三):脚本生成(1)基本使用

    在上一篇,我们对 QFramework 的两个主要版本提供了介绍,并且写下了第一个 QFramework 脚本. 在这一篇,我们学习 QFramework 中几乎每个项目都要用到并且从中受益的功能:自 ...

  6. QFramework 使用指南 2020(六):脚本生成(4)小结与补充

    我们花了四篇文章,介绍了 QF 中的脚本生成功能. 实际上 QF 中的脚本生成是有两种的,第一种就是我们现在学习的 ViewController + Bind 模式. 这种模式是为除 UGUI 以外的 ...

  7. QFramework 使用指南 2020(五):脚本生成(3)生成 Prefab

    在上一篇,我们简单介绍了 ViewController 的嵌套实现. 在这一篇,我们学习 ViewController 脚本生成的最后一个功能,即:生成 Prefab. 实际上这个功能非常简单. 我们 ...

  8. QFramework 使用指南 2020 (四):脚本生成(2)ViewController 与 ViewController 嵌套绑定

    在上一篇,我们学习了,脚本生成的基本使用. 在这一篇,我们试着深入,聊聊脚本生成给我们带来的便利. 脚本生成的便利 首先,我们要知道,在 Unity 的游戏世界中都是以 GameObject 为单位的 ...

  9. Android实战简易教程-第四十九枪(两种方式实现网络图片异步加载)

    加载图片属于比较耗时的工作,我们需要异步进行加载,异步加载有两种方式:1.通过AsyncTask类进行:2.通过Handler来实现,下面我们就来看一下如何通过这两种方式实现网络图片的异步加载. 一. ...

随机推荐

  1. nginx中ngx_http_ssl_module模块

    此模块为HTTPS提供必要的⽀支持worker_processes auto;http {...server {listen 443 ssl;keepalive_timeout 70;ssl_prot ...

  2. vue1 计算属性

  3. 控制warning信息在控制台的显示

    在运行代码时,有时出现warning信息, 1.当你后台不需要warning信息的时候,可以直接把warning信息省略掉. 2.如果代码是循环,则会在控制台打印多次warning信息,这会使得war ...

  4. Win10远程桌面 报错:CredSSP加密Oracle修正……

    解决方法: 运行 gpedit.msc 本地组策略: 计算机配置>管理模板>系统>凭据分配>加密Oracle修正 选择启用并选择易受攻击. 参考: https://blog.c ...

  5. React事件处理和原生JS事件处理

    1.原生JS 事件触发调用有三种方式: 1. on[event]事件属性,手动触发  ❗️on[event]事件是Window对象上的方法. 2. on[event]事件属性,通过htmlElemen ...

  6. char 类型的数组转换到CSting

    首先,字符串“abc”在CString的保存格式是‘a’,'\0','b','\0','c','\0','\0','\0'; 从中可以看出它是以‘\0’,'\0',结束的. 当char ch[6]: ...

  7. 如何用 Windows Live Writer 和 Word 2013 分别发表博客到Cnblog 和CSDN

    ps CSDN 老是505错误,放弃了 为什么会写这篇 最近写博客在 Cnblog 上面写博客, 发现图片不能复制了直接粘贴上,这对于把博客当随手笔记的人来说无疑非常痛苦.求助于博客园,他们让我用 W ...

  8. 十六、程序包管理之 rpm

    c语言程序的构建过程 1.程序源代码 --> 预处理 --> 编译 --> 汇编 --> 链接--> 可执行程序 开放源码:就是程序码,文本格式的源代码,写给人类看的程序 ...

  9. Tomcat部署时war和war exploded区别以及如何实现热部署

    war和war exploded的区别       使用IDEA配置Tomcat服务的时候,在 Select Artifacts to Deploy 选项中相同项目名有war和 war explode ...

  10. ie和vuex的兼容

    vuex requires a Promise polyfill in this browser. 在ie中的报错 需要安卓babel-polyfill,  然后在webpack.base.confi ...