同步异步加载Resources下的资源

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

public class ResLoadMgrMono : MonoBehaviour {

// Use this for initialization
void Start () {
	
}

// Update is called once per frame
void Update () {
    if (Input.GetKeyDown(KeyCode.S))
    {
        //同步加载资源
        GameObject a = ResLoadMgr.Instance().Load<GameObject>("pool/Cube");
        //做一些资源真正加载出来后,想要做的事情
        a.transform.localScale = Vector3.one * 2;
    }
    if (Input.GetKeyDown(KeyCode.A))
    {
        //异步加载资源
        ResLoadMgr.Instance().LoadAsync<GameObject>("pool/Cube", OnLoadAsync);//委托
    }
}
/// <summary>
/// 委托
/// </summary>
/// <param name="obj"></param>
private void OnLoadAsync(GameObject obj)
{
    //做一些资源真正加载出来后,想要做的事情
    obj.transform.localScale = Vector3.one * 2;
}
/// <summary>
/// 同步加载资源
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="path"></param>
/// <returns></returns>
public T Load<T>(string path) where T : Object
{
    T res = Resources.Load<T>(path);
    if (res is GameObject)
    {
        return GameObject.Instantiate(res);
    }
    else
    {
        return res;
    }

}
/// <summary>
/// 开启异步加载
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="path"></param>
/// <param name="action"></param>
public void LoadAsync<T>(string path, UnityAction<T> action) where T : Object
{
    //开启携程
    StartCoroutine(ResLoadAsync(path, action));
}
/// <summary>
/// 异步加载资源
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="path"></param>
/// <param name="action"></param>
/// <returns></returns>
private IEnumerator ResLoadAsync<T>(string path, UnityAction<T> action) where T : Object
{
    ResourceRequest r = Resources.LoadAsync<T>(path);

    yield return r;
    if (r.asset is GameObject)
    {
        action(GameObject.Instantiate(r.asset) as T);
    }
    else
    {
        action(r.asset as T);
    }
}

}

发布了24 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qiao2037641855/article/details/105224365