到这里为止我们都是仿照唐老师的教程造轮子,略作优化,这里唐老师加载资源暂时用的是Resources.Load。我打算使用最新的Addressable,因此Addressable加载部分暂时往后放一放,我们最后再处理Addressable加载问题。
这里先继续引用一下唐老师的Resources文件夹资源加载工具:
using System;
using System.Collections;
using UnityEngine;
using Object = UnityEngine.Object;
/// <summary>
/// Resources文件夹资源加载工具
/// </summary>
public class ResourceUtil : Singleton<ResourceUtil>
{
/// <summary>
/// 同步加载资源
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="name">资源名</param>
/// <returns></returns>
public T Load<T>(string name) where T : Object
{
T obj = Resources.Load<T>(name);
if (obj is GameObject)
return GameObject.Instantiate(obj);
else
return obj;
}
/// <summary>
/// 异步加载资源
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="name">资源名</param>
/// <param name="action">回调</param>
public void LoadAsyn<T>(string name, Action<T> action) where T : Object
{
//使用MonoManager调用协程(因为ResourceMgr没有继承MonoBehavior)
MonoUtil.Instance.StartCoroutine(LoadAsynIE<T>(name, action));
}
/// <summary>
/// 协程异步加载资源
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="name">资源名</param>
/// <param name="action">回调</param>
/// <returns></returns>
private IEnumerator LoadAsynIE<T>(string name, Action<T> action) where T : Object
{
ResourceRequest r = Resources.LoadAsync<T>(name);
yield return r;
if (r.asset is GameObject)
action(GameObject.Instantiate(r.asset) as T);
else
action(r.asset as T);
}
}
暂停一下
到目前为止,大部分的代码都是仿照唐老师的框架写的代码,但本人的目标其实是期望写出凉鞋的QF那种框架代码。唐老师的框架其实过于简单化,并且更多适用于小型项目或者小型游戏。因此后续的音频管理等等暂时不借鉴了。
现在框架的思路暂时转变一下,下面是后续的计划:
1.学习UniRx作为主要的逻辑支撑
2.找到一个简单易用的UI框架,如果实在没有则仿制凉鞋QF
3.编写Addressable架构处理
因此本系列先暂停一下,咱们去学一下UniRx~重新开一个系列咯
网友评论