zoukankan      html  css  js  c++  java
  • QFramework 使用指南 2020(九):Res Kit(3)异步加载 与 异步队列加载

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

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

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

    using QF.Res;
    using QF.Extensions;
    using UnityEngine;
    
    namespace QF.Example 
    {
    	public class TestResKit : MonoBehaviour 
    	{
    
    		void Awake () 
    		{
    			// 全局只需初始化一次
    			ResMgr.Init ();
    		}
    
    		/// <summary>
    		/// 每一个需要加载资源的单元(脚本、界面)申请一个 ResLoader
    		/// ResLoader 本身会记录该脚本加载过的资源
    		/// </summary>
    		/// <returns></returns>
    		ResLoader mResLoader = ResLoader.Allocate ();
    
    		void Start () 
    		{
    			// 通过 LoadSync 同步加载资源
    			// 只需要传入资源名即可,不需要传入 AssetBundle 名。
    			mResLoader.LoadSync<GameObject> ("TestObj")
    				.Instantiate ();
    		}
    
    		void OnDestroy()
    		{
    			// 释放所有本脚本加载过的资源
    			// 释放只是释放资源的引用
    			// 当资源的引用数量为 0 时,会进行真正的资源卸载操作
    			mResLoader.Recycle2Cache();
    			mResLoader = null;
    		}
    	}
    }
    

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

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

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

    异步加载

    异步加载代码如下:

    // 添加到加载队列
    mResLoader.Add2Load("TestObj",(succeed,res)=>{
        if (succeed) 
        {
            res.Asset.As<GameObject>()
    						.Instantiate();
        }
    });
    
    // 执行异步加载
    mResLoader.LoadAsync();
    

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

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

    同时异步加载多个资源

    代码如下:

    // 添加一个资源
    mResLoader.Add2Load("TestObj",(succeed,res)=>{
        if (succeed) 
        {
            res.Asset.As<GameObject>()
                .Instantiate();
        }
    });
    
    // 加载一个资源,不处理
    mResLoader.Add2Load("TestObj1",(succeed,res)=>{});
    
    // 加载一个列表中的资源
    mResLoader.Add2Load(new List<string>(){ "TestObj2","TestObj3","TestObj4"});
    
    // 执行加载操作
    mResLoader.LoadAsync(()=>{
      // 可以监听所有的资源是否加载成功
      "资源加载成功".LogInfo();
    });
    

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

    此篇的内容就这些。

    • 转载请注明地址:凉鞋的笔记:liangxiegame.com。
    • 任何问题欢迎到 QQ 群:623597263 交流。
    • 更多内容关注微信公众号:liangxiegame
  • 相关阅读:
    韦大仙--Katalon---一款好用的selenium自动化测试插件
    Python之路,Day3
    Python之路,Day2
    Python之路,Day1
    Python基础02 基本数据类型
    Python基础01 Hello World!
    韦大仙--LoadRunner压力测试:详细操作流程
    韦大仙--python对文件操作 2--写入与修改
    韦大仙--python对文件操作
    更新pip10后 ImportError: cannot import name ‘main'
  • 原文地址:https://www.cnblogs.com/liangxiegame/p/11498370.html
Copyright © 2011-2022 走看看