Unity资源之Resources目录

介绍

将资产存储在一个或多个名为Resources的文件夹中,并在运行时使用Resources API 从这些资产加载或卸载对象。


Resources System的最佳实践

不要使用它

出于以下几个原因,提出了这一强烈建议:

使用 Resources 文件夹使细粒度的内存管理更加困难

资源文件夹使用不当会增加应用程序启动时间和构建时间

随着 Resources 文件夹数量的增加,管理这些文件夹中的 Assets 变得非常困难

资源系统降低了项目向特定平台交付自定义内容的能力,并消除了增量内容升级的可能性

AssetBundle Variants 是 Unity 用于根据每个设备调整内容的主要工具


正确使用资源系统

有两个特定的用例,资源系统可以在不妨碍良好开发实践的情况下提供帮助:

1、Resources 文件夹的易用性使其成为快速制作原型的绝佳系统。 但是,当项目进入全面生产阶段时,应取消使用 Resources 文件夹。

2、 Resources 文件夹在一些琐碎的情况下可能会有用,如果内容是:
a. 通常在项目的整个生命周期中都需要
b. 不占用内存
c. 不容易打补丁,或者不会因平台或设备而异
d. 用于最小引导

第二种情况的示例包括用于托管预制件的 MonoBehaviour 单例,或包含第三方配置数据(例如 Facebook 应用程序 ID)的 ScriptableObjects。

Resources序列化

  构建项目时,所有名为“Resources”的文件夹中的资产和对象都合并到一个序列化文件中。 该文件还包含元数据和索引信息,类似于 AssetBundle。 如 AssetBundle 文档中所述,该索引包括一个序列化查找树,用于将给定对象的名称解析为其适当的文件 GUID 和本地 ID。 它还用于在序列化文件主体中的特定字节偏移处定位对象。

  在大多数平台上,查找数据结构是一个平衡的搜索树,其构建时间以 O(n log(n)) 的速度增长。 随着资源文件夹中对象数量的增加,这种增长也会导致索引的加载时间以超线性方式增长。

  此操作不可跳过,发生在应用程序启动时,同时显示初始非交互式启动画面。 据观察,在低端移动设备上初始化包含 10,000 个资产的资源系统会耗费数秒,尽管实际上很少需要将资源文件夹中包含的大多数对象加载到应用程序的第一个场景中。

### 回答1: UnityResourcesUnity中用于加载资源的类。它可以加载各种类型的资源,包括图片、音频、视频、模型等。使用UnityResources加载资源非常简单,只需要指定资源的路径即可。例如,如果要加载一个名为“myImage”的图片,可以使用以下代码: Texture2D myTexture = Resources.Load<Texture2D>("myImage"); 这将在Resources文件夹中查找名为“myImage”的图片,并将其加载到Texture2D对象中。需要注意的是,Resources文件夹必须位于Assets文件夹的根目录下,否则无法正确加载资源。 ### 回答2: Unity 是一款颇受欢迎的游戏引擎,而 UnityResources 怎么加载资源呢?通俗来讲,UnityResourcesUnity 自带的一种加载资源的方式,它可以自动加载 Unity 项目中 Assets 文件夹下的资源。具体来说,可以使用 Resources.Load 方法来动态加载Unity 资源。 首先,需要在 Resources 文件夹下创建相应的文件夹并放入资源,然后就可以在代码中通过 Resources.Load 来加载这些资源。具体代码如下: ```c# //加载预制件 GameObject prefab = Resources.Load("Prefabs/Cube") as GameObject; //实例化预制件 Instantiate(prefab, transform.position, Quaternion.identity); //加载文本 TextAsset textAsset = Resources.Load("Texts/MyText") as TextAsset; //在控制台输出文本 Debug.Log(textAsset.text); //加载纹理 Texture texture = Resources.Load("Textures/MyTexture") as Texture; //给物体添加材质 gameObject.GetComponent<Renderer>().material.mainTexture = texture; //加载音频 AudioClip audioClip = Resources.Load("Audios/MyAudio") as AudioClip; //播放音频 AudioSource.PlayClipAtPoint(audioClip, Camera.main.transform.position); ``` 需要注意的是,使用 Resources.Load 方法加载资源并不是最优的方式,因为它需要在运行时动态加载资源,会造成一定的性能损失。而 AssetBundle 是一个更好的选择。但是在某些场景下,比如需要经常切换场景时,使用 Resources.Load 会更容易管理和维护。 除了 Resources.Load 方法,Unity 还提供了其他的资源加载方式,比如 AssetDatabase 和 AssetBundle 等,针对不同的情况可以选择不同的加载方式。例如,AssetBundle 可以在不同的场景之间共享资源,提高资源的复用性。 总之,UnityResources 加载资源是一个灵活多变的方式,可以根据需要选择不同的加载方式。需要注意的是,在开发过程中要尽可能提高资源的加载效率和减少资源的浪费,以保证应用程序的稳定性和流畅性。 ### 回答3: Unity是一款非常流行的游戏引擎,它的资源加载机制非常重要。在Unity中,要加载资源通常需要用到unityresourcesunityresources是一个二进制文件格式,它用于存储Unity中各种资源,例如模型、纹理、音频等,这些资源会被编译成一个或多个unityresources文件,以便于在游戏运行时快速加载和使用。 在Unity中加载unityresources,通常需要使用Resource.Load或Resources.Load函数。这两个函数都可以加载unityresources文件中的资源,但是它们的使用方式略有不同。 Resource.Load函数是一种直接加载unityresources中指定资源的方法。它的用法比较简单,只需要传入资源路径即可: ``` Resource.Load("路径/资源名"); ``` Resources.Load函数则需要先加载unityresources文件,然后再从其中获取指定资源。具体用法如下: ``` var resFile = Resources.Load("路径/资源名") as ResourceFile; var resObj = resFile.LoadAsset("资源名"); ``` 以上代码首先通过Resources.Load函数加载指定的unityresources文件,然后通过ResourceFile.LoadAsset方法获取指定资源。 需要注意的是,使用Resource.Load或Resources.Load函数加载unityresources文件时,要指定正确的资源路径和资源名称,否则将无法加载到资源。此外,由于unityresources文件是二进制格式,因此可以使用校验和等方法来确保其完整性,从而避免误操作带来的损失。 总之,unityresourcesUnity中非常重要的资源加载机制,正确的使用方法和技巧能够大大提高游戏的性能和质量。因此,开发者应该仔细学习和掌握相关知识,并根据实际需求灵活运用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值