👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:unity每日一记
⭐🅰️推荐文章⭐
⭐【软件设计师高频考点暴击】
⭐【Unityc#专题篇】之c#系统化大礼包】
⭐【unity数据持久化】数据管理类_PlayerPrfs
⭐【unity本站最全系列】unity常用API大全一篇文章足以
⭐⭐
文章目录
- ⭐🅰️推荐文章⭐
- ⭐⭐
- 🎶Resources资源动态加载
- 同步加载
- 异步加载
- 资源加载器
- 卸载资源
- ⭐🅰️系统路线学习点击跳转⭐
🎶Resources资源动态加载
同步加载
5种资源加载的方式,Resource加载介绍
- Resources(只能加载Resources目录中的资源)
- AssetBundle(只能加载AB资源,当前设备允许访问的路径都可以)
- WWW(可以加载任意处资源,包括项目外资源(如远程服务器))
- AssetDatabase(只能加载Assets目录下的资源,但只能用于Editor)
- UnityWebRequest(可以加载任意处资源,是WWW的升级版本)
资源加载适用于需要加载资源较多的 情况就不用一个一个的拖拽进去
关键字:@ ,as
卸载AB包的方法: Resource. UnLoadAsset
void Start() { Object obj= Resources.Load("sound"); //AudioClip ac = obj as AudioClip; AudioClip ac = (AudioClip)obj; AudioSource.PlayClipAtPoint(ac, transform.position); //Resources.LoadAll("Prefabs"); AudioClip[] audioClips= Resources.LoadAll
(""); foreach (var item in audioClips) { Debug.Log(item); } //Resources.UnloadAsset } -
C#中的回收机制是系统自动回收的,有多种回收机制,不像其他语言需要手动回收
注意:
//预设体对象加载需要实例化
//其它资源加载一般直接用
#endregion
Resource资源加载操作
加载资源前首先需要在project面板中创建Resource名字的文件夹,为固定文件夹用于资源加载
以加载AudioClip类型的资源为例:
- 根目录加载 Resource.Load< AudioClip>(“voice”);
- 子目录加载 Resource.Load ( @ " 子目录名/ voice") ;
- 另一种形式:
Object xx = Resource.Load(“voice”);
AudioClip yy as xx ; // 显性类型转换 ,前提是二者兼容
- 加载同类型所有资源的方法:
①根目录加载: AudioClip [] xx = Resource.AllLoad(" “) ;
②子目录加载:AudioClip [] yy = Resource.AllLoad(” 子目录名");
- 1.预设体对象
Object obj = Resources.Load("Cube"); Instantiate(obj);
- 2.音效资源
Object obj3 = Resources.Load("Music/BKMusic"); //我们不需要实例化 音效切片 我们只需要把数据 赋值到正确的脚本上即可 audioS.clip = obj3 as AudioClip; audioS.Play();
- 3.文本资源
文本资源支持的格式——.txt .xml .bytes .json .html .csv …
TextAsset ta = Resources.Load("Txt/Test") as TextAsset; //文本内容 ta.text //字节数据组 ta.bytes);
- 4.图片
tex = Resources.Load("Tex/TestJPG") as Texture;
异步加载
如果我们加载过大的资源可能会造成程序卡顿
异步加载 就是内部新开一个线程进行资源加载 不会造成主线程卡顿
- Resources.LoadAsync(“XXX”);
- 注意:
异步加载 不能马上得到加载的资源 至少要等待一帧
直接异步加载——适用于加载单个资源
//通过事件监听 ResourceRequest rq = Resources.LoadAsync
("Tex/TestJPG") rq.completed += LoadOver; //completed 是 ResourceRequest 中的委托 // AsyncOperation 是 ResourceRequest 的父类 private void LoadOver( AsyncOperation rq) { //在事件中添加结束标识逻辑,这样我们就知道异步加载完成了 print("加载结束"); //加载完成后 会保存在 ResourceRequest类中的 asset Object类型成员里 //此时实现赋值 picture = (rq as ResourceRequest).asset as Texture; } 配套协程异步加载——适用于加载多个资源
//通过协程的调度器自己判断是否加载结束 StartCoroutine(Load()); IEnumerator Load() { ResourceRequest rq = Resources.LoadAsync
("Tex/TestJPG"); yield return rq; // yield return rq会自己判断 该资源是否加载完毕了,加载完毕过后才继续执行后面的代码 ,因为ResourceRequest 也是YieldInstruction的子类 //------------------------------- //isDone 和 progress API的应用 while(!rq.isDone) { //打印当前的 加载进度 print(rq.progress); yield return null; } //-------------------------------- picture = rq.asset as Texture; }
资源加载器
利用异步直接加载和委托的使用构成简单的资源加载器
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; //------------------------------------- //————————————————————————————————————— //___________项目: ______________ //___________功能: 简单的资源管理器 //___________创建者:秩沅_______________ //_____________________________________ //------------------------------------- public class ResourcesControl { static private ResourcesControl control; static public ResourcesControl Control => control; private ResourcesControl() { } public void AddResources
(string name ,UnityAction source ) where T : Object { ResourceRequest yb = Resources.LoadAsync (name); yb.completed += (reO) => { source( (reO as ResourceRequest).asset as T ); }; } } //外部调用 private void Start() { GameObject shootball; ResourcesControl.Control.AddResources ("Profabs/ball",(sphere)=> { shootball = sphere; } ); }
卸载资源
-
Resources多次重复加载不会浪费内存
但是 会浪费性能(每次加载都会去查找取出,始终伴随一些性能消耗)
-
1.卸载指定资源
Resources.UnloadAsset 方法
注意:
它只能用于一些 不需要实例化的内容 比如 图片 和 音效 文本等 一般情况下很少单独使用它
-
2.卸载未使用的资源
一般在过场景时和GC一起使用
Resources.UnloadUnusedAssets();
GC.Collect();
⭐🅰️系统路线学习点击跳转⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、
-
- 4.图片
- 3.文本资源
- 2.音效资源
- 1.预设体对象
-
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章