更新日期:2019年9月26日。
Github源码:[点我获取源码]
Gitee源码:[点我获取源码]

索引

  • Resource资源管理器简介
  • 使用Resource资源管理器
    • 设置资源加载模式
    • 浏览所有Resources文件夹
    • 加载常规资源
    • 加载预制体
    • 加载数据集
    • 加载场景
    • 卸载资源
  • 运行时检视面板

Resource资源管理器简介

Resource资源管理器主要用于动态加载资源(只支持异步加载),在加载中或加载完成后都可以进行自定义操作,现在主要支持Resource加载和AssetBundle加载,比如,UI模块就会自动调用资源管理器加载UI实体。

目前资源的加载策略是单线加载,如果有多个请求同时下载资源,只有第一个请求会下载资源,其他请求会挂起等待,直到当前请求完成,再按序下载。这样做的好处是如果有多个请求同时下载一个资源包时,挂起其他请求,只下载一次,在下载完成后其他请求会首先从下载缓存中读取自己需要的资源,如果没有再重新下载。

使用Resource资源管理器

设置资源加载模式


没错,Resource加载模式就是直接从Resources文件夹加载,使用Resource加载模式请确认资源存在于Resources文件夹下的路径。

使用AssetBundle加载模式时:
1、必须提供Manifest Name(AB包清单名称,也即是AB包打包完成后,里面会自动生成的一个清单文件的名称);
2、Editor Mode表明是否使用编辑器模式(编辑器模式会忽略AB包限制,直接通过路径加载资源,此属性在项目发布出去后会自动无效);

默认情况下,AssetBundle的加载根路径是StreamingAssetsPath,如果资源需要通过网络加载,请在初始化时指定资源的网络加载根路径。(推荐的方式是:将AB包下载到本地,再使用资源本地加载)

        //也可以设置资源下载根路径为网络地址Main.m_Resource.SetAssetBundlePath("http://192.168.0.100/Test/ABs/");

浏览所有Resources文件夹

使用Resource加载模式,可以点击面板按钮Resources Folder View浏览工程目录下所有的Resources文件夹,并查看其中的所有资源文件,因为Resources文件夹中的文件都会被打入运行包,所以可以在此处查看是否有深度隐藏的Resources文件夹被悄悄打入运行包导致冗余资源。

Resources Folder View面板点击指定的资源,可以在Project窗口立即定位到该资源文件。

加载常规资源

加载Unity常规资源(除GameObject、Scene外的其他资源)使用以下方法完成:

public Coroutine LoadAsset<T>(AssetInfo info, Action<float> loadingAction, Action<T> loadDoneAction){}

每一个常规资源由一个AssetInfo对象标记,例如,加载一个图片:

    //常规资源信息,请注意第二个参数需要提供资源在工程中的全路径,以便于在Editor模式能正确加载该资源private AssetInfo _asset = new AssetInfo("UI","Asset/Image/Test.png", "Image/Test");private void Start(){//加载 Test.pngMain.m_Resource.LoadAsset<Sprite>(_asset, Loading, LoadDone);}/// <summary>/// 加载中/// </summary>/// <param name="progress"></param>private void Loading(float progress){//获取加载界面UILoading loading = Main.m_UI.GetOpenedUI<UILoading>();if (loading != null){//更新加载进度loading.UpdateProgress(progress);}}/// <summary>/// 加载完成/// </summary>/// <param name="sprite">图片</param>private void LoadDone(Sprite sprite){Image image = GetComponent<Image>();image.sprite = sprite;}

加载预制体

预制体不同于其他通用资源,他们常常可以直接使用,并且类型都是GameObject,加载预制体使用以下方法完成:
注意:参数isUI默认为false,如果加载的预制体是UGUI对象时,会有特殊处理。

public Coroutine LoadPrefab(PrefabInfo info, Transform parent, Action<float> loadingAction, Action<GameObject> loadDoneAction, bool isUI = false){}

每一个预制体由一个PrefabInfo对象标记,例如,加载一个预制体:

    //预制体信息,请注意第二个参数需要提供资源在工程中的全路径,以便于在Editor模式能正确加载该预制体private PrefabInfo _prefab = new PrefabInfo("Obj","Asset/Prefabs/Test.prefab", "Prefabs/Test");private void Start(){//加载 TestMain.m_Resource.LoadPrefab(_prefab, transform, Loading, LoadDone);}/// <summary>/// 加载中/// </summary>/// <param name="progress"></param>private void Loading(float progress){//获取加载界面UILoading loading = Main.m_UI.GetOpenedUI<UILoading>();if (loading != null){//更新加载进度loading.UpdateProgress(progress);}}/// <summary>/// 加载完成/// </summary>/// <param name="obj">预制体</param>private void LoadDone(GameObject obj){obj.SetActive(true);}

加载数据集

数据集需要继承至数据集基类DataSet,主要用于存储各种数据,加载数据集使用以下方法完成:
注意:只用于加载事先内置在编辑器中的数据集,动态创建的数据集不需要再加载。

public Coroutine LoadDataSet<T>(DataSetInfo info, Action<float> loadingAction, Action<T> loadDoneAction){}

每一个数据集由一个DataSetInfo对象标记,例如,加载一个数据集:

    //数据集信息,请注意第二个参数需要提供资源在工程中的全路径,以便于在Editor模式能正确加载该数据集//第四个参数为用于初始化此数据集的JSON数据,为空则保持数据集默认数据private DataSetInfo _dataSet = new DataSetInfo("Obj","Asset/DataSet/Test.asset", "DataSet/Test", null);private void Start(){//加载 TestMain.m_Resource.LoadDataSet<MainDataSet>(_dataSet, Loading, LoadDone);}/// <summary>/// 加载中/// </summary>/// <param name="progress"></param>private void Loading(float progress){//获取加载界面UILoading loading = Main.m_UI.GetOpenedUI<UILoading>();if (loading != null){//更新加载进度loading.UpdateProgress(progress);}}/// <summary>/// 加载完成/// </summary>/// <param name="obj">数据集</param>private void LoadDone(MainDataSet asset){//将数据集保存到数据集仓库Main.m_DataSet.AddDataSet(asset);}

加载场景

由于框架的策略:其他场景只支持AB包动态加载,所以这里加载场景时必须使用AssetBundle模式:

public Coroutine LoadScene(SceneInfo info, Action<float> loadingAction, Action loadDoneAction){}

每一个场景资源由一个SceneInfo 对象标记,例如,加载一个场景Level1:

    //场景资源信息,请注意第二个参数为场景名称private SceneInfo _asset = new SceneInfo("scene","Level1");private void Start(){//加载 Level1Main.m_Resource.LoadScene(_asset, Loading, null);}/// <summary>/// 加载中/// </summary>/// <param name="progress"></param>private void Loading(float progress){//获取加载界面UILoading loading = Main.m_UI.GetOpenedUI<UILoading>();if (loading != null){//更新加载进度loading.UpdateProgress(progress);}}

卸载资源

理论上只支持卸载AssetBundle资源:

        //卸载名为 UI 的 AssetBundleMain.m_Resource.UnLoadAsset("UI");//卸载所有 AssetBundleMain.m_Resource.UnLoadAllAsset();

运行时检视面板

在编辑器中运行时将会出现运行时检视面板(Runtime Data),主要用以调试或数据监测,目前面板如下:

1.如果在AssetBundle加载模式下,这里会显示当前加载到工程中的所有AB包信息。

【Unity】 HTFramework框架(十)Resource资源管理器相关推荐

  1. GameFramework框架详解之 Resource资源管理器

    资源加载 一.前言 GF实现了一套资源加载模块,只提供了一套异步加载的接口,而且也并不打算提供同步加载的接口. 二.资源框架简介 1. 资源类型定义 GF资源管理内部,实现了两个关于资源类的定义: 1 ...

  2. Android 开源框架 ( 十六 ) 视频播放器 --- JiaoZiVideoPlayer(JieCaoVideoPlayer)

    原JieCaoVideoPlayer 不知道什么时候改名了,现在叫JiaoZiVideoPlayer. 项目GitHub地址:https://github.com/lipangit/JiaoZiVid ...

  3. Unity 游戏框架搭建 (九) 减少加班利器-QConsole

    为毛要实现这个工具? 在我小时候,每当游戏在真机运行时,我们看到的日志是这样的. 没高亮啊,还有乱七八糟的堆栈信息,好干扰日志查看,好影响心情. 还有就是必须始终连着usb线啊,我想要想躺着测试... ...

  4. Hadoop技术(二)资源管理器YARN和分布式计算框架MapReduce

    资源管理器YARN和分布式计算框架MapReduce 第一章 Hadoop MapReduce 是什么 一 MapReduce 介绍 1. 基本介绍 2. MR数据流程方向 3. MR 原语/ 核心思 ...

  5. unity游戏框架学习-框架结构

    转眼毕业三年了,算上实习差不多四年的游戏开发了,一直想自己鼓捣套框架,奈何能力太次,不知道从哪开始.但是万事开头难,总要踏出第一步,才会有后面的两步,三步- 我认为的unity游戏框架就是一整套的工具 ...

  6. unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了

    ----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...

  7. 从Hadoop到Spark、Flink,大数据处理框架十年激荡发展史

    abstract: 当前这个数据时代,各领域各业务场景时时刻刻都有大量的数据产生,如何理解大数据,对这些数据进行有效的处理成为很多企业和研究机构所面临的问题.本文将从大数据的基础特性开始,进而解释分而 ...

  8. .NET简谈自定义事务资源管理器

    在上一篇文章"NET简谈事务.分布式事务处理"中我大概总结了关于.NET中的事务处理方式和结合了WCF框架的简单应用.在事务性操作中我们的重点是能将数据进行可逆化,说白了就是能保证 ...

  9. QNX系列:五、资源管理器(1)官方文档的翻译

    文章目录 @[toc] 资源管理器 什么是资源管理器? 资源管理器示例 串行端口 文件系统 资源管理器的特征 client的观点 查找服务器 寻找流程经理 处理目录 联合文件系统 client总结 资 ...

  10. [Unity]PureMVC框架解读(上)

    PureMVC框架解读 简易UI框架 1.UI框架核心方法 BaseUI会记录UI的名字(枚举)和Controller用来将UI与具体操作方法解耦 UIManger利用字典记录所有的UI组件,然后提供 ...

最新文章

  1. 强类型DataSet中的DBNull的处理
  2. Aizu 0525 Osenbei(状压+贪心)
  3. Direct2D教程(一)Direct2D已经来了,谁是GDI的终结者?
  4. Docker nginx部署阿里https(最新的方案)
  5. 职业技术人士学习捷径最快的网站
  6. python动态表情包下载_Python从eif中导出qq表情的gif图片
  7. WIN7开启WIFI
  8. Unity3D——SendMessage方法的使用
  9. python中验证码连通域分割的方法详解
  10. Flash Builder4序列号 注册机
  11. ctf web3 30 flag就在这里快来找找吧http://123.206.87.240:8002/web3
  12. oracle中字体倒转,Oracle特殊查询 行列倒转 分页
  13. 全网最透彻的Hash分析
  14. VBA 中的UBound
  15. 《响应式Web设计实践》一2.2 字体大小
  16. 聊天室小程序服务端源码(客户端接下一条)
  17. 清除“全能车”这颗“毒瘤”,共享单车再出发
  18. 分省市县地理空间矩阵:地级市空间、地理距离矩阵等多指标数据集
  19. OpenWRT学习笔记(1)环境部署代码下载及编译
  20. 分析周杰伦超话爬虫思路

热门文章

  1. 论文特色自我评价内容结构
  2. 不用恢复出厂设置啦,联想电脑YogaDuet如何升级win11?在BIOS开启加载系统初始值 打开Intel Platform Trust开启TMP2.0更新win11
  3. 扫拖地机器人预留_进阶规划,扫拖一体,小瓦扫地机器人规划版重度体验
  4. 一天狂点3.7万个赞! 男子因“点赞过多”被大众点评网处罚 法庭上吵翻
  5. 微型计算机硬件系统包括什么,微型计算机硬件系统由什么组成(6个基本组成部件)...
  6. 001_ucGUI/emWin字体制作(FontCvt.exe)
  7. 豆瓣电影top250爬虫+数据可视化分析
  8. Python单词识别
  9. modbus模拟器基本使用
  10. 天猫精灵服务器修改密码,天猫精灵怎么解绑 天猫精灵解绑账号方法