当前位置:   article > 正文

Unity resource 资源加载_unity resources.loadasync

unity resources.loadasync

使用前必须在项目中创建一个名叫Resources的文件夹,这个名字是固定的。

在一个项目可以创建多个名叫Resources的文件夹,它们可以放在Assets文件夹中的任意位置,使用Resources的方法加载时,将对每个Resources文件夹进行查找。 注意:如果一个项目中有多个Resources文件夹,则应确保里面的文件的相对路径不重复

在同一个文件夹中,文件名不要重名,如果实在要重名,则加载时要使用泛型加载指定的类型。

使用Resources.Load或者Resources.LoadAll加载时,路径是从Resources文件夹里面的文件夹开始的,例如Resources文件夹里有一个Audio文件夹,Audio文件夹里面也有一个Music文件夹,Music文件夹有一个叫做Song的.mp3文件,则路径是"Audio/Music/Song"

路径中的文件名末尾一定不要写后缀,写了后缀反而加载不成功。

路径可以用反斜杠来写。"Audio/Music/Song"可以写成:

"Audio\Music\Song"

或者

@"Audio\Music\Song"

不建议路径用反斜杠来写,建议统一都用正斜杠来写。

Resources.Load(string 要加载的资源的路径)

返回值是Object型。

同步加载Resources文件夹中的资源。

如果有多个相同路径的资源,则只会返回找到的第一个资源。

Resources.Load(string 要加载的资源的路径, System.Type 要加载的资源的类型的Type对象)

返回值是Object型。

同步加载Resources文件夹中的指定类型的资源。

如果有多个相同类型,且相同路径的资源,则只会返回找到的第一个资源。

Resources.Load(string 要加载的资源的路径)

返回值是要加载的资源的类型。

同步加载Resources文件夹中的指定类型的资源。

如果有多个相同类型,且相同路径的资源,则只会返回找到的第一个资源。

Resources.LoadAll(string 要加载的资源的文件夹路径或文件路径)

返回值是Object[]型。

同步加载Resources文件夹中指定路径的文件夹中的所有资源,包括其中子孙文件夹中的所有资源,然后返回到一个Object[]型数组

如果该路径是一个文件,则只会加载该文件,并返回到一个Object[]型数组。

如果没有加载到任何资源,则返回一个没有任何元素的Object[]型数组。

Resources.LoadAll(string 要加载的资源的文件夹路径或文件路径,System.Type 要加载的资源的类型的Type对象)

返回值是Object[]型。

同步加载Resources文件夹中指定路径的文件夹中的指定类型的所有资源,包括其中子孙文件夹中的该类型的所有资源,然后返回到一个Object[]型数组。

如果该路径是一个该指定类型的文件,则只会加载该文件,并返回到一个Object[]型数组。

如果没有加载到任何资源,则返回一个没有任何元素的Object[]型数组。

Resources.LoadAll(string 要加载的资源的文件夹路径或文件路径)

同步加载Resources文件夹中指定路径的文件夹中的指定类型的所有资源,包括其中子孙文件夹中的该类型的所有资源,然后返回到一个Object[]型数组。

如果该路径是一个该指定类型的文件,则只会加载该文件,并返回到一个Object[]型数组。

如果没有加载到任何资源,则返回一个没有任何元素的Object[]型数组。

Resources.LoadAsync(string 要加载的资源的路径,UnityAction资源加载完毕后要执行的逻辑)

返回值是ResourceRequest类型。

一般配合协程来使用。在协程中可以使用yield return来等待资源加载。

异步加载Resources文件夹中的资源。

如果有多个相同路径的资源,则只会加载找到的第一个资源。

回调的参数就是加载的资源。

Resources.LoadAsync(string 要加载的资源的路径,System.Type 要加载的资源的Type对象,UnityAction资源加载完毕后要执行的逻辑)

返回值是ResourceRequest类型。

一般配合协程来使用。在协程中可以使用yield return来等待资源加载。

异步加载Resources文件夹中指定类型的资源。

如果有多个相同路径的资源,则只会加载找到的第一个资源。

回调的参数就是加载的资源。

Resources.LoadAsync(string 要加载的资源的路径,UnityAction 资源加载完毕后要执行的逻辑)

返回值是ResourceRequest类型。

一般配合协程来使用。在协程中可以使用yield return来等待资源加载。

异步加载Resources文件夹中指定类型的资源。

如果有多个相同类型,且相同路径的资源,则只会加载找到的第一个资源。

回调的参数就是加载的资源。

经用Resources.Load、Resources.LoadAsync、Resources.LoadAll加载的资源,即使在场景中没有使用,它们也会占用内存,此时要释放它们,就可以使用Resources.UnloadUnusedAssets方法和Resources.UnloadAssets方法。

Resources.UnloadUnusedAssets

返回值是AsyncOperation型。

异步卸载所有用Resources方式加载到内存中且当前没有被任何地方使用的资源。

可以配合协程使用。

例如要卸载某一个用Resources方式加载的预制体,则必须确保场景中所有这个预制体创建的物体都被销毁了,且这个预制体资源没有赋值给任何脚本中的任何变量。

如果有,可以把该变量也赋值为null,这样本方法才能成功释放它。

Resource.UnloadAsset(Object 要卸载的资源)

无返回值。

卸载指定的资源。

只能卸载非GameObject类型和Component类型,例如Mesh、Texture、Material、Shader。如果卸载了不让卸载的资源,则会报错。

如果随后加载的任何场景或资源引用了该资源,将导致从磁盘中加载该资源的新实例。此新实例将与先前卸载的对象相互独立。

Resources.FindObjectsOfTypeAll()

把已加载的指定类型的对象返回成指定类型的数组。

包括但不限于游戏对象、预制件、材质、网格、纹理等。

此方法还把Unity内部对象返回到该数组中,因此请小心处理返回的对象。

只要对象是指定的类型的,且已经加载了它,即使它是被禁用,也会被返回到该数组。

Resources.FindObjectsOfTypeAll(Type 要查找的类型的Type对象)

把已加载的指定类型的对象返回成Object[]型的数组。

包括但不限于游戏对象、预制件、材质、网格、纹理等。

此方法还把Unity内部对象返回到该数组中,因此请小心处理返回的对象。

只要对象是指定的类型的,且已经加载了它,即使它是被禁用,也会被返回到该数组。

Resources.InstanceIDToObject(int 对象的实例ID)

返回值是Object型。

根据对象的实例ID返回该对象。

对象的实例ID可以通过 对象.GetInstanceID() 获取。

代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// 资源管理器
/// </summary>
public class ResourcesManager : SingletonPatternBase<ResourcesManager>
{
    /// <summary>
    /// 同步加载Resources文件夹中指定类型的资源。
    /// 如果有多个相同类型,且相同路径的资源,则只会返回找到的第一个资源。
    /// </summary>
    /// <typeparam name="T">要加载的资源的类型</typeparam>
    /// <param name="path">资源的路径</param>
    public T Load<T>(string path)where T : Object
    {
        return Resources.Load<T>(path);
    }

    public T[] LoadAll<T>(string path) where T : Object
    {
        return Resources.LoadAll<T>(path);
    }

    /// <summary>
    /// <para>异步加载Resources文件夹中指定类型的资源</para>
    /// <para>如果有多个相同类型,且相同路径的资源,则只会加载找到的第一个资源。</para>
    /// </summary>
    /// <typeparam name="T">加载的资源的类型</typeparam>
    /// <param name="path">要加载的资源的路径</param>
    /// <param name="callback">资源加载完毕后要执行的逻辑</param>
    public void LoadAsync<T>(string path,UnityAction<T> callback=null)where T:Object
    {
        MonoManager.Instance.StartCoroutine(LoadAsyncCoroutine(path,callback));
    }
    IEnumerator LoadAsyncCoroutine<T>(string path, UnityAction<T> callback = null) where T : Object
    {
        //开始加载资源
        ResourceRequest resourceRequest=Resources.LoadAsync<T>(path);
        //等待资源加载完毕
        yield return resourceRequest;
        callback?.Invoke(resourceRequest.asset as T);
    }

    /// <summary>
    /// 异步卸载资源,往往在切换场景的时候使用。
    /// </summary>
    public void UnloadUnusedAssets(UnityAction callback=null)
    {
        MonoManager.Instance.StartCoroutine(UnloadUnusedAssetsCoroutine(callback));
    }
    IEnumerator UnloadUnusedAssetsCoroutine(UnityAction callback=null)
    {
        //开始卸载资源
        AsyncOperation asyncOperation=Resources.UnloadUnusedAssets();

        //等待资源卸载
        while (asyncOperation.progress<1)
        {
            yield return null;
        }

        //资源卸载完毕后执行的逻辑
        callback?.Invoke();
    }
}
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/566358
推荐阅读
相关标签
  

闽ICP备14008679号