ResourceManager.cs📄
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// 资源加载模块
///
/// 1.异步加载
/// 2.委托和 lambda表达式
/// 3.协程
/// 4.泛型
/// </summary>
public class ResourceManager : Singleton<ResourceManager>
{
public T Load<T>(string path) where T : Object
{
T res=Resources.Load<T>(path);
//这里为了外部方便如果是加载实例化物体,我们帮外部进行实例化,后将引用给外部
if (res is GameObject)
{
return GameObject.Instantiate(res);
}
else
{
return res;
}
}
public void LoadAsync<T>(string path, UnityAction<T> callback) where T : Object
{
//开启异步加载的协程
MonoManager.Instance.StartCoroutine(ReallyLoadAsync(path, callback));
}
//真正的协同程序函数 用于开启异步加载对应的资源
private IEnumerator ReallyLoadAsync<T>(string path, UnityAction<T> callback) where T : Object
{
ResourceRequest r = Resources.LoadAsync<T>(path);
yield return r;
if (r.asset is GameObject)
callback(GameObject.Instantiate(r.asset) as T);
else
callback(r.asset as T);
}
}