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);
}
}
}