异步加载中使用回调函数,可以在加载完相关资源后再执行相关逻辑
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class ResManager : BaseManager<ResManager>
{
/// <summary>
/// 同步加载
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
/// <param name="name">资源名</param>
/// <returns></returns>
public T Load<T>(string name) where T : Object
{
T res = Resources.Load<T>("path" + name);
res.name = name;
if (res is GameObject)
{
return GameObject.Instantiate(res);
}
else
{
return res;
}
}
/// <summary>
/// 异步加载
/// </summary>
/// <typeparam name="T">资源类型</typeparam>
/// <param name="name"资源名></param>
/// <param name="callback">加载资源后,要处理的逻辑</param>
public void LoadAsync<T>(string name, UnityAction<T> callback) where T : Object
{
MonoManager.GetInstance().StartCoroutine(ReallyLoadAsync<T>(name, callback));
}
private IEnumerator ReallyLoadAsync<T>(string name, UnityAction<T> callback) where T : Object
{
ResourceRequest r = Resources.LoadAsync<T>("path" + name);
yield return r;
r.asset.name = name;
if (r.asset is GameObject)
{
callback(GameObject.Instantiate(r.asset) as T);
}
else
{
callback(r.asset as T);
}
}
}
ResManager.GetInstance().LoadAsync<GameObject>("cube", (cube)=>
{
//进一步的逻辑处理
});