本文介绍了 Unity 常用四种默认路径,以及 AssetDataBase、Resources、AssetBundle 和目前最新的 Addressable 四种资源管理方式
文中所有 API 均以版本 2019.3 为准
本文原地址:Unity学习—资源管理概览
资源路径
Application.dataPath
官方文档
只读,Editor 可读写
游戏数据相对路径,即游戏安装路径,PC 上路径会使用 '/' 分割文件夹
- Unity Editor:
<项目根路径>/Assets
- Mac player:
<App 包路径>/Contents
- iOS player:
<App 包路径>/<AppName.app>/Data
- Win/Linux player:
<可执行数据文件夹路径>
- WebGL: player data 文件的 绝对 url 地址 (不包含具体文件名)
- Android: 一般为 APK 路径, 若使用 split binary build, 则为 OBB 路径
- Windows Store Apps: player data 文件夹的绝对地址
Application.persistentDataPath
官方文档
可读写,用于持久化数据存储,在 iOS 和 Android 平台该路径指向设备的公共路径,该目录不会随 App 升级而删除,但可被用户直接删除
persistentDataPath
的路径由Bundle Identifier
生成的 GUID 组成,只要Bundle Identifier
不变,路径不变
iOS 会自动将 persistentDataPath 路径下的文件备份到 iCloud
- Windows Store Apps:
%userprofile%AppDataLocalPackages<productname>LocalState
- iOS:
/var/mobile/Containers/Data/Application/<guid>/Documents
- Android:
/storage/emulated/0/Android/data/<packagename>/files
该路径由 android.content.Context.getExternalFilesDir 获得,部分机型该路径会指向 SD 卡 - Mac:
~/Library/Application Support/<company name>/<product name>
,旧版本还可能为~/Library/Caches
或~/Library/Application Support/unity.company name.product name
,Unity 会查询并使用以上路径中最早的路径
Application.streamingAssetsPath
官方文档 官方手册
只读,Editor 可读写
流数据存储的相对路径,该目录下 Asset 在 Unity 编译时不会被 Unity 打包,使其在运行时可直接通过路径获取,可将资源放入 Assets 目录下任何名为 StreamingAssets
文件夹
StreamingAssets
中资源可使用 I/O 读取,但 WebGL 和 Android 平台下该路径为 URL,不支持直接获取,因此需使用 UnityWebRequest
获取。若其他平台使用 UnityWebRequest
获取,则需在路径前加上"file://"
,如 "file://" + Application.streamingAssetsPath + "/file.mp4"
- Unity Editor, Windows, Linux players, PS4, Xbox One, Switch :
Application.dataPath + "/StreamingAssets"
- Mac:
Application.dataPath + "/Resources/Data/StreamingAssets"
- iOS:
Application.dataPath + "/Raw"
- Android:
"jar:file://" + Application.dataPath + "!/assets"
(压缩后的 APK/JAR 文件)
Application.temporaryCachePath
可读写,临时数据和缓存路径,应用更新或覆盖安装时不会被清除,手机空间不足时才可能会被系统清除
路径示例
读写权限说明
说明
资源加载
推荐官方教程
AssetDataBase
AssetDataBase 可在 Editor 环境下对项目 Asset 进行增删改查等操作(可实现与 Unity 编辑器顶部工具栏 Assets 选项下基本相同的功能),使用方法可参考官方手册 接口文档
Resources
接口文档
可在项目 Assets 目录下任意位置创建Resources
文件夹,打包时 Unity 会整合所有位于Resources
文件夹的 Asset 及其依赖,并生成一个只读的 resources.assets
资产文件,对于 Resources 目录中在游戏中被直接引用的资产,则会被另外打包到 sharedassets0.assets
中
Resources 最佳实践
官方的建议是不使用 Resources,有以下几点原因:
- Resources 文件夹会导致内存管理困难
- 不适当使用 Resources 文件夹会加长应用启动和编译时间,Resources 文件夹越多,Asset 管理越困难
- Resources 系统降低项目针对指定平台使用自定义内容的能力,并且无法实现增量更新(AssetBundle 是 Unity 针对不同设备提供特定内容的主要工具)
适合使用 Resources 的场景:
- 因其简单快速的特性