Unity基础小框架(五):资源同步异步加载模块

 异步加载中使用回调函数,可以在加载完相关资源后再执行相关逻辑

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)=>
{
    //进一步的逻辑处理
});

猜你喜欢

转载自blog.csdn.net/XueZhiXia_/article/details/137057600