ResourcesManager.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// 资源加载模块
/// 异步、委托、协程、泛型
/// </summary>
public class ResourcesManager : BaseManager<ResourcesManager>
{
//同步
public T Load<T>(string name) where T:Object
{
T res = Resources.Load<T>(name);
//如果对象是GameObject 实例化后就可以返回
if (res is GameObject)
return Object.Instantiate(res);
else//textasset Audio
return res;
}
//异步加载资源
public void LoadAsync<T>(string name , UnityAction<T> callback) where T : Object
{
MonoManager.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);
}
}