Unity设计模式06_异步加载资源
2020-06-06 04:33
106 查看
与异步加载场景类似,只是加载资源一般不用提供加载资源UI界面,开始加载资源后直接yield return让程序运行外部代码即可:
1.同步加载资源:
/// <summary> /// 同步加载资源 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="path"></param> /// <returns></returns> public T LoadResource<T>(string path)where T:Object { T resource = Resources.Load<T>(path); //判断某种实例是不是某种类型(a is A)[注意] //如果是GameObject直接实例化 if (resource is GameObject) { GameObject obj = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>(path)); return obj as T; } else return resource; }
2.异步加载资源:
/// <summary> /// 异步加载资源 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="path"></param> /// <param name="action"></param> public void LoadResourceAsync<T>(string path, UnityAction<T> action) where T : Object { MonoManager.GetInstance().StartCoroutine(I_LoadResourceAsync<T>(path, action)); } //将异步的东西都放在协程里面做 IEnumerator I_LoadResourceAsync<T>(string path,UnityAction<T> action) where T:Object { ResourceRequest request = Resources.LoadAsync<T>(path); //返回执行外部后面的代码回来后继续加载场景直到加载完毕往后执行 yield return request; //加载完毕 if (request.asset is GameObject) { GameObject obj = GameObject.Instantiate<GameObject>(Resources.Load<GameObject>(path)); action(obj as T); } else action(request.asset as T); }
在外部调用时可以结合Lambda表达式使代码简化
相关文章推荐
- unity 资源加载框架设计
- Unity开发(三) AssetBundle同步异步引用计数资源加载管理器
- unity 资源加载框架设计
- unity深入研究--之异步加载游戏场景与异步加载游戏资源进度条
- 关于Unity资源异步加载的研究
- Unity:异步加载场景资源进度界面
- Unity_设计模式_外观模式_06
- 【unity】异步加载游戏场景与异步加载游戏资源进度条
- 浅谈Unity资源异步加载和Coroutine的使用
- Unity资源加载的选择(同步/异步)
- Unity 3D 音乐播放器www异步加载外部资源
- unity中异步加载游戏场景与异步加载游戏资源进度条
- Unity资源加载的选择(同步/异步)
- unity 资源加载框架设计
- Unity开发(五) Asset同步异步引用计数资源加载管理器
- Unity异步加载AssetBundle方案,4.x版本资源加载(5.x版本资源可以参考插件AssetBundleManager)
- 如何优化代码节约系统资源解决重复实例化对象的问题——神奇的单例模式(C#设计模式)
- 设计模式_学习_00_资源帖
- javascript的设计模式实现06之Chain of Responsibility
- 【Unity与23种设计模式】适配器模式(Adapter)