更新日期: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. MySQL查询进阶之多表查询
  2. 用Beamer制作幻灯片(卷三 动画篇)
  3. 使用Python+Pycaret进行异常检测
  4. 百篇大计敬本年之系统篇《八》—— Ubuntu16.04 挂载windows的 NTFS 文件系统时错误的解决方法...
  5. 标准采购订单的计算方案确定
  6. 用Emesene替换Windows Live Messenger
  7. fedora linux命令,Fedora Linux的一些常用设置和常用命令
  8. RabbitMQ消息确认以及return机制
  9. eclipse创建maven
  10. 基于SharePoint 2010的控制台应用程序常见问题
  11. 淘淘商城第105讲——购物车实现分析及工程搭建
  12. stm8单片机程序加密方法 id加密技巧
  13. 计算机键盘按键功能说明,电脑键盘各个按键功能分别是什么 电脑键盘各个按键功能介绍...
  14. oc引导windows蓝屏_最全的Windows 系统蓝屏死机代码的含义及解决方案
  15. 失效而后犬儒【2019.05.15报告记录】
  16. 一万套Solidworks非标自动化设备三维图纸 3D通用模型 机械设计UG
  17. CentOS7 配置搭建安装LNMP
  18. [python]用爬虫下载某站小说并生成epub格式电子书(用mkepub库)
  19. Pytorch + Win10系统 + pip安装+ CUDA9.1版本(安装CUDA10.2版本)
  20. JavaScript之Three.js

热门文章

  1. android amr转换mp3格式文件,安卓批量amr转mp3 微信amr批量转换
  2. 访问yy直播页面点击播放无响应分析
  3. 语言模型(Language Modeling)”
  4. 用python做乘法口诀表_如何用python编写乘法口诀表
  5. 个性化网站建设的一般流程
  6. 4G关键技术之MIMO
  7. 选择性粘贴HTML,Excel中“选择性粘贴”的五种特殊用法
  8. excel选择性粘贴为何是html,Excel2016中选择性粘贴功能的使用方法
  9. 如何找到计算机上的画图拦,电脑中自带的Window画图工具不见了怎么恢复
  10. Bluefish编辑成果即时预览