using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; /// /// 资源加载模块 /// 1.异步加载 /// 2.委托和 lambda表达式 /// 3.协程 /// 4.泛型 /// public class ResMgr : BaseManager { //同步加载资源 public T Load(string name) where T:Object { T res = Resources.Load(name); //如果对象是一个GameObject类型的 我把他实例化后 再返回出去 外部 直接使用即可 if (res is GameObject) return GameObject.Instantiate(res); else//TextAsset AudioClip return res; } //异步加载资源 public void LoadAsync(string name, UnityAction callback) where T:Object { //开启异步加载的协程 MonoMgr.GetInstance().StartCoroutine(ReallyLoadAsync(name, callback)); } //真正的协同程序函数 用于 开启异步加载对应的资源 private IEnumerator ReallyLoadAsync(string name, UnityAction callback) where T : Object { ResourceRequest r = Resources.LoadAsync(name); yield return r; if (r.asset is GameObject) callback(GameObject.Instantiate(r.asset) as T); else callback(r.asset as T); } }