文章
- 一、前言
- 二、StreamingAssets文件夹
- 1. 用途
- 2. 访问方式
- 3. 优点
- 4. 缺点
- 三、AssetBundle
- 1. 用途
- 2. 访问方式
- 3. 优点
- 4. 缺点
- 四、Resources文件夹
- 1. 用途
- 2. 访问方式
- 3. 优点
- 4. 缺点
- 五、总结
- 一句话记忆
- 如何选择?
一、前言
很多 Unity 初学者都会遇到一个困惑:StreamingAssets、AssetBundle、Resources 这三个文件夹到底有什么区别?它们都能存放资源,但用法和适用场景却大不相同。
简单打个比方:
- Resources就像你随身背的小背包,东西少、拿取方便,但背的东西越多越累(打包体积变大)。
- StreamingAssets就像仓库货架,东西直接摆在那里,随时能拿,但不会自动帮你整理(不参与打包)。
- AssetBundle就像快递包裹,需要时再拆开取用,还能从外地寄过来(从服务器下载),适合大件和更新。
下面我们逐一详细讲解,并给出简单的代码示例,帮你彻底分清它们。
二、StreamingAssets文件夹
1. 用途
StreamingAssets 文件夹用于存储不需要打包的资源,比如音频、视频、数据库等大型文件。构建项目时,这些文件会被原样复制到构建目录中,运行时可以直接访问。
2. 访问方式
可以使用System.IO相关的类来读写文件,在移动平台上使用Application.streamingAssetsPath获取路径。
usingUnityEngine;usingSystem.IO;publicclassReadStreamingAssets:MonoBehaviour{voidStart(){// 获取 StreamingAssets 文件夹的路径stringpath=Path.Combine(Application.streamingAssetsPath,"data.txt");// 读取文件内容if(File.Exists(path)){stringcontent=File.ReadAllText(path);Debug.Log("读取到内容:"+content);}}}3. 优点
- 简单直接,不需要打包和解包。
- 适合存储不需要加密或优化的文件。
4. 缺点
- 文件会原样暴露在安装包中,容易被玩家修改。
- 无法按需加载,所有文件都会占用安装包空间。
三、AssetBundle
1. 用途
AssetBundle 是一种打包和分发资源的机制。它可以把多个资源打包成一个文件,运行时按需动态加载,常用于大型游戏,减少初始加载时间。
2. 访问方式
使用AssetBundle.LoadFromFile或AssetBundle.LoadFromMemory加载,也可以从服务器下载后加载。
usingUnityEngine;publicclassLoadAssetBundle:MonoBehaviour{voidStart(){// 从本地文件加载 AssetBundleAssetBundlebundle=AssetBundle.LoadFromFile(Application.streamingAssetsPath+"/mybundle");if(bundle!=null){// 从 AssetBundle 中加载一个 GameObjectGameObjectprefab=bundle.LoadAsset<GameObject>("MyPrefab");Instantiate(prefab);// 使用完毕后卸载bundle.Unload(false);}}}3. 优点
- 可以按需加载资源,优化内存使用。
- 支持热更新,可以从服务器下载新资源,无需重新发布游戏。
4. 缺点
- 需要手动管理打包和加载流程,学习成本较高。
- 需要处理依赖关系和版本管理,复杂度较高。
四、Resources文件夹
1. 用途
Resources 文件夹用于存储运行时动态加载的资源。构建项目时,这些资源会被自动打包到最终的构建文件中。
2. 访问方式
使用Resources.Load或Resources.LoadAll加载资源,使用Resources.UnloadAsset卸载资源。
usingUnityEngine;publicclassLoadResources:MonoBehaviour{voidStart(){// 从 Resources 文件夹加载一个预制体GameObjectprefab=Resources.Load<GameObject>("Prefabs/MyPrefab");Instantiate(prefab);}}3. 优点
- 简单易用,适合小型游戏或不需要频繁更新的资源。
- 资源在构建时被打包,减少了运行时的文件访问。
4. 缺点
- 所有 Resources 中的资源都会被打包,即使没用到也会占用空间。
- 无法热更新,发布后不能单独替换资源。
五、总结
| 对比项 | StreamingAssets | AssetBundle | Resources |
|---|---|---|---|
| 是否打包 | 不打包,原样复制 | 打包成独立文件 | 自动打包进构建文件 |
| 加载方式 | 文件系统直接读写 | 按需动态加载 | Resources.Load |
| 是否支持热更新 | 支持(替换文件) | 支持(下载新包) | 不支持 |
| 适用场景 | 音频、视频、数据库等大文件 | 大型游戏、热更新 | 小型游戏、固定资源 |
| 学习难度 | ⭐ | ⭐⭐⭐ | ⭐ |
一句话记忆
- StreamingAssets:仓库货架,直接放、直接拿,适合大文件。
- AssetBundle:快递包裹,需要时拆开,还能远程寄送,适合热更新。
- Resources:随身背包,方便但装不了太多,适合小项目。
如何选择?
- 存大文件(视频、音频、数据库)→ 用StreamingAssets
- 做大型游戏或需要热更新→ 用AssetBundle
- 做小项目、资源固定不变 → 用Resources
希望这篇文章能帮你彻底分清这三个文件夹的区别,在实际开发中选对方案!