Unity资源之Resources目录

Posted a_codecat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 个资产的资源系统会耗费数秒,尽管实际上很少需要将资源文件夹中包含的大多数对象加载到应用程序的第一个场景中。

Unity 基础 之 特殊文件夹

Resources文件夹

  Unity允许你按需动态加载游戏资源到场景中。Resources.Load 函数可以加载项目中位于任何位置的 Resources 文件夹中的资源。你可以有多个Resources文件夹,不管是否是顶级文件夹都可以。在打包后无法写入数据。这个文件夹下不建议放太大的资源,不然打出来的包体太大。


Editor文件夹

  Editor文件夹可以在根目录下,也可以在子目录里,只要名字叫Editor就可以。比如目录:/xxx/xxx/Editor 和 /Editor 是一样的,无论多少个叫Editor的文件夹都可以。Editor下面放的所有资源文件或者脚本文件都不会被打进发布包中,并且脚本也只能在编辑时使用。

  一般呢会把一些工具类的脚本放在这里,或者是一些编辑时用的DLL。 比如我们现在要做类似技能编辑器,那么编辑器的代码放在这里是再好不过了,因为实际运行时我们只需要编辑器生成的文件,而不需要编辑器的核心代码。


Plugins文件夹

  文件夹中存放用于扩展unity功能的插件(多为C/C++写成的原生动态链接库(DLLs))。这些插件可以访问第三方代码库,系统API以及其他超出Unity功能的模块。


StreamingAssets文件夹

  这个文件夹下的资源也会全都打包在.apk或者.ipa 它和Resources的区别是,Resources会压缩文件,但是它不会压缩原封不动的打包进去。并且它是一个只读的文件夹,就是程序运行时只能读不能写。

  它在各个平台下的路径是不同的,不过你可以用Application.streamingAssetsPath 它会根据当前的平台选择对应的路径。

  有些游戏为了让所有的资源全部使用assetbundle,会把一些初始的assetbundle放在StreamingAssets目录下,运行程序的时候在把这些assetbundle拷贝在Application.persistentDataPath目录下,如果这些assetbundle有更新的话,那么下载到新的assetbundle在把Application.persistentDataPath目录下原有的覆盖掉。

  因为Application.persistentDataPath目录是应用程序的沙盒目录,所以打包之前是没有这个目录的,直到应用程序在手机上安装完毕才有这个目录。
StreamingAssets目录下的资源都是不压缩的,所以它比较大会占空间,比如你的应用


Gizmos文件夹

  Unity的Gizmos类可在Scene视口中绘制图像用来显示设计细节。Gizmos.DrawIcon函数可以在场景视口中绘制一个图标以标记特殊的对象和位置。该函数使用的图像文件需要位于 Gizmos 中。


Hidden Assets文件夹

在导入阶段,Unity将完全忽略以下文件夹下的资源:

  • 以 Hidden 命名的文件夹。
  • 以 ‘.’ 开头的文件和文件夹
  • 以 ‘~’ 开头的文件和文件夹
  • 以 ‘cvs’ 命名的文件和文件
  • 以 ‘tmp’ 为扩展名的文件

以上是关于Unity资源之Resources目录的主要内容,如果未能解决你的问题,请参考以下文章

Unity 基础 之 目录结构解析

Unity 基础 之 目录结构解析

Unity 读取调用资源 Resources.Load(详细+示例)

使用Resources类搭建Unity简单的资源管理工具类

Unity——资源文件夹介绍

Unity5 怎样做资源管理和增量更新