您的位置:首页 > 移动开发 > Unity3D

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表达式使代码简化

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: