【Unity】 HTFramework框架(十)Resource资源管理器
更新日期: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资源管理器相关推荐
- GameFramework框架详解之 Resource资源管理器
资源加载 一.前言 GF实现了一套资源加载模块,只提供了一套异步加载的接口,而且也并不打算提供同步加载的接口. 二.资源框架简介 1. 资源类型定义 GF资源管理内部,实现了两个关于资源类的定义: 1 ...
- Android 开源框架 ( 十六 ) 视频播放器 --- JiaoZiVideoPlayer(JieCaoVideoPlayer)
原JieCaoVideoPlayer 不知道什么时候改名了,现在叫JiaoZiVideoPlayer. 项目GitHub地址:https://github.com/lipangit/JiaoZiVid ...
- Unity 游戏框架搭建 (九) 减少加班利器-QConsole
为毛要实现这个工具? 在我小时候,每当游戏在真机运行时,我们看到的日志是这样的. 没高亮啊,还有乱七八糟的堆栈信息,好干扰日志查看,好影响心情. 还有就是必须始终连着usb线啊,我想要想躺着测试... ...
- Hadoop技术(二)资源管理器YARN和分布式计算框架MapReduce
资源管理器YARN和分布式计算框架MapReduce 第一章 Hadoop MapReduce 是什么 一 MapReduce 介绍 1. 基本介绍 2. MR数据流程方向 3. MR 原语/ 核心思 ...
- unity游戏框架学习-框架结构
转眼毕业三年了,算上实习差不多四年的游戏开发了,一直想自己鼓捣套框架,奈何能力太次,不知道从哪开始.但是万事开头难,总要踏出第一步,才会有后面的两步,三步- 我认为的unity游戏框架就是一整套的工具 ...
- unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了
----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...
- 从Hadoop到Spark、Flink,大数据处理框架十年激荡发展史
abstract: 当前这个数据时代,各领域各业务场景时时刻刻都有大量的数据产生,如何理解大数据,对这些数据进行有效的处理成为很多企业和研究机构所面临的问题.本文将从大数据的基础特性开始,进而解释分而 ...
- .NET简谈自定义事务资源管理器
在上一篇文章"NET简谈事务.分布式事务处理"中我大概总结了关于.NET中的事务处理方式和结合了WCF框架的简单应用.在事务性操作中我们的重点是能将数据进行可逆化,说白了就是能保证 ...
- QNX系列:五、资源管理器(1)官方文档的翻译
文章目录 @[toc] 资源管理器 什么是资源管理器? 资源管理器示例 串行端口 文件系统 资源管理器的特征 client的观点 查找服务器 寻找流程经理 处理目录 联合文件系统 client总结 资 ...
- [Unity]PureMVC框架解读(上)
PureMVC框架解读 简易UI框架 1.UI框架核心方法 BaseUI会记录UI的名字(枚举)和Controller用来将UI与具体操作方法解耦 UIManger利用字典记录所有的UI组件,然后提供 ...
最新文章
- MySQL查询进阶之多表查询
- 用Beamer制作幻灯片(卷三 动画篇)
- 使用Python+Pycaret进行异常检测
- 百篇大计敬本年之系统篇《八》—— Ubuntu16.04 挂载windows的 NTFS 文件系统时错误的解决方法...
- 标准采购订单的计算方案确定
- 用Emesene替换Windows Live Messenger
- fedora linux命令,Fedora Linux的一些常用设置和常用命令
- RabbitMQ消息确认以及return机制
- eclipse创建maven
- 基于SharePoint 2010的控制台应用程序常见问题
- 淘淘商城第105讲——购物车实现分析及工程搭建
- stm8单片机程序加密方法 id加密技巧
- 计算机键盘按键功能说明,电脑键盘各个按键功能分别是什么 电脑键盘各个按键功能介绍...
- oc引导windows蓝屏_最全的Windows 系统蓝屏死机代码的含义及解决方案
- 失效而后犬儒【2019.05.15报告记录】
- 一万套Solidworks非标自动化设备三维图纸 3D通用模型 机械设计UG
- CentOS7 配置搭建安装LNMP
- [python]用爬虫下载某站小说并生成epub格式电子书(用mkepub库)
- Pytorch + Win10系统 + pip安装+ CUDA9.1版本(安装CUDA10.2版本)
- JavaScript之Three.js
热门文章
- android amr转换mp3格式文件,安卓批量amr转mp3 微信amr批量转换
- 访问yy直播页面点击播放无响应分析
- 语言模型(Language Modeling)”
- 用python做乘法口诀表_如何用python编写乘法口诀表
- 个性化网站建设的一般流程
- 4G关键技术之MIMO
- 选择性粘贴HTML,Excel中“选择性粘贴”的五种特殊用法
- excel选择性粘贴为何是html,Excel2016中选择性粘贴功能的使用方法
- 如何找到计算机上的画图拦,电脑中自带的Window画图工具不见了怎么恢复
- Bluefish编辑成果即时预览