👨💻个人主页:@元宇宙-秩沅
👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
👨💻 本文由 秩沅 原创
👨💻 收录于专栏:Unity基础实战
⭐🅰️⭐
文章目录
- ⭐🅰️⭐
- ⭐前言⭐
- 🎶(==W==) 资源加载管理器
- 1.涉及知识点
- 2. 特点
- 3.脚本
- ⭐🅰️⭐
⭐前言⭐
🎶(W) 资源加载管理器
1.涉及知识点
2. 特点
- 方便加载资源,为资源加载提供了接口
3.脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class ResourceManager : SingleManager<ResourceManager>
{
//同步加载资源方法
public T Load<T>(string name) where T:Object
{
T resource = Resources.Load<T>(name);
if (resource is GameObject)
return GameObject.Instantiate(resource);
else
return resource;
}
//异步加载资源方法
public void LoadAsync<T>(string name, UnityAction<T> callback) where T:Object
{
//开启异步加载的协程
UpdateManager.GetInstance().StartCoroutine(ReallyLoadAsync(name, callback));
}
//真正的协同程序函数 用于 开启异步加载对应的资源
private IEnumerator ReallyLoadAsync<T>(string name, UnityAction<T> callback) where T : Object
{
ResourceRequest r = Resources.LoadAsync<T>(name);
yield return r;
//等待加载完之后回调
if (r.asset is GameObject)
callback(GameObject.Instantiate(r.asset) as T);
else
callback(r.asset as T);
}
//为什么这里要用Unity委托,因为实例化语句执行后我们要获得实例化的返回值。但在协同函数中,无法实现,所以需要一个有返回值的委托代替
}
- 加载测试
void Start()
{
//同步加载
ResourceManager.GetInstance().Load<GameObject>("asda");
//异步加载
ResourceManager.GetInstance().LoadAsync<GameObject>("asdsa",(aa)=>
{
print(aa.name);
});
}
⭐🅰️⭐
⭐【Unityc#专题篇】之c#进阶篇】
⭐【Unityc#专题篇】之c#核心篇】
⭐【Unityc#专题篇】之c#基础篇】
⭐【Unity-c#专题篇】之c#入门篇】
⭐【Unityc#专题篇】—进阶章题单实践练习
⭐【Unityc#专题篇】—基础章题单实践练习
⭐【Unityc#专题篇】—核心章题单实践练习
你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!、
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class ResourceManager : SingleManager
{
//同步加载资源方法
public T Load(string name) where T:Object
{
T resource = Resources.Load(name);
if (resource is GameObject)
return GameObject.Instantiate(resource);
else
return resource;
}
//异步加载资源方法
public void LoadAsync<T>(string name, UnityAction<T> callback) where T:Object
{
//开启异步加载的协程
UpdateManager.GetInstance().StartCoroutine(ReallyLoadAsync(name, callback));
}
//真正的协同程序函数 用于 开启异步加载对应的资源
private IEnumerator ReallyLoadAsync<T>(string name, UnityAction<T> callback) where T : Object
{
ResourceRequest r = Resources.LoadAsync<T>(name);
yield return r;
//等待加载完之后回调
if (r.asset is GameObject)
callback(GameObject.Instantiate(r.asset) as T);
else
callback(r.asset as T);
}
//为什么这里要用Unity委托,因为实例化语句执行后我们要获得实例化的返回值。但在协同函数中,无法实现,所以需要一个有返回值的委托代替
}
+ 加载测试
```csharp
void Start()
{
//同步加载
ResourceManager.GetInstance().Load<GameObject>("asda");
//异步加载
ResourceManager.GetInstance().LoadAsync<GameObject>("asdsa",(aa)=>
{
print(aa.name);
});
}