Unity 各平台Application.xxxPath的路径

本文解析了Unity中四个常用路径的功能及对应平台的实际路径,包括Application.dataPath、Application.streamingAssetsPath、Application.persistentDataPath和Application.temporaryCachePath。这些路径分别对应Unity项目的不同文件夹,如Assets、StreamingAssets、持久数据文件夹及临时缓存文件夹。

Unity常用四个路径路径

Application.dataPath
Application.streamingAssetsPath
Application.persistentDataPath
Application.temporaryCachePath

Windows

Application.dataPath
路径一直到工程目录下Assets文件夹
举例:F:/UnityWork/TestAssetBundle/Assets
Application.streamingAssetsPath
路径一直到工程目录下Assets文件夹中的StreamingAssets文件夹
举例:F:/UnityWork/TestAssetBundle/Assets/StreamingAssets
Application.persistentDataPath
持久数据文件夹
举例:C:/Users/dell/AppData/LocalLow/DefaultCompany/TestAssetBundle
Application.temporaryCachePath
临时缓存文件夹
举例:C:/Users/dell/AppData/Local/Temp/DefaultCompany/TestAssetBundle

IOS

iOS和Mac OS X不同于Windows,app都是在一个沙盒空间中运行,每个app也有一个独立的数据存储空间,各app彼此不能互相访问、打扰。
app的独立数据存储目录下有三个文件夹:Documents,Library和tmp。

Application.dataPath
路径:/var/containers/Bundle/Application/app sandbox/xxx.app/Data  
dataPath是app程序包安装路径,app本身就在这里,此目录是只读的
Application.streamingAssetsPath
路径:/var/containers/Bundle/Application/app sandbox/test.app/Data/Raw  
streamingAssetsPath是dataPath下的Raw目录。
Application.persistentDataPath
路径:/var/mobile/Containers/Data/Application/app sandbox/Library/Caches 
Documents目录,这个目录用于存储需要长期保存的数据,比如我们的热更新内容就写在这里。
需要注意的是,iCloud会自动备份此目录,如果此目录下写入的内容较多,审核的可能会被苹果拒掉。
Application.temporaryCachePath
路径:/var/mobile/Containers/Data/Application/app sandbox/Documents 
Library目录,这个目录下有两个子目录,Caches和Preferences。 
Caches:是一个相对临时的目录,适合存放下载缓存的临时文件,空间不足时可能会被  系统清除,Application.temporaryCachePath返回的就是此路径。我把热更新的临时文件    写在这里,等一个版本的所有内容更新完全后,再把内容转移到Documents目录。 
Preferences:用于应用存储偏好设置,用NSUserDefaults读取或设置。

注意
tmp目录,临时目录,存放应用运行时临时使用的数据。
需要注意的是,以上无论临时、缓存或者普通目录,如果不需要的数据,都请删除。不要占用用户的存储空间,像微信就是坏榜样。

下面是各路径对应的OC访问方法
app安装路径:
[[NSBundle mainBundle] resourcePath]

app数据沙盒存储根目录:
NSHomeDirectory()

Documents:
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)

Library:
NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)

Caches:
NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)
Tmp:
NSTemporaryDirectory()

Android

Application.dataPath
路径:/data/app/package name-1/base.apk 
apk程序包目录:apk的安装路径,/data/app/package name-n/base.apk,
dataPath就是返回此目录。
Application.streamingAssetsPath
路径: jar:file:///data/app/package name-1/base.apk!/assets 
内部存储目录: /data/data/package name-n/,用户自己或其它app都不能访问该目录。

打开会发现里面有4个目录(需要root) 
Cache:缓存目录,类似于iOS的Cache目录 ,热更新临时文件在此目录
Databases:数据库文件目录 
Files:类似于iOS的Documents目录 ,热更新在此目录
shared_prefs:类似于iOS的Preferences目录,用于存放常用设置,比如Unity3D的PlayerPrefs就存放于此
Application.persistentDataPath
路径:/storage/emulated/0/Android/data/package name/files
类似于iOS的Documents目录
Application.temporaryCachePath
路径:/storage/emulated/0/Android/data/package name/cache 
缓存目录,类似于iOS的Cache目录 ,热更新临时文件在此目录
<think>好的,用户想了解UnityApplication各个路径的用途。首先,我需要回忆UnityApplication类中常用的路径属性,以及它们在不同平台上的差异。然后整理这些路径的用途和使用场景,确保涵盖常见平台如Windows、Android、iOS等。 首先,Application.dataPath,这是最常用的路径,指向项目资源文件夹。需要说明它在编辑器和不同平台下的具体位置,比如在编辑器里是Assets同级目录,Android下是apk内部,无法写入,这时候可能需要使用persistentDataPath来存储数据。 接下来是Application.streamingAssetsPath,这个路径用于存放不需要编译的资源,比如视频、配置文件。需要强调不同平台上读取方式的差异,比如在Android上需要用WWW或UnityWebRequest来读取。 然后是Application.persistentDataPath,这是持久化数据存储路径,适合保存用户生成的内容或配置文件。这部分需要详细说明各个平台的具体路径,比如iOS的Library目录,Android的/data/data目录,以及如何在各个平台上访问。 Application.temporaryCachePath和Application.temporaryCachePath可能是一个重复,但应该是指临时缓存目录,适合存储短期数据,应用退出后可能被清除。需要说明不同平台的位置和清理策略。 还有Application.consoleLogPath,这个可能只在某些平台存在,比如在控制台平台记录日志的路径,需要指出其适用范围。 然后要考虑用户可能的实际使用场景,比如读取资源、保存游戏进度、配置文件等,举例说明不同路径如何选择。同时,提醒用户注意不同平台的权限问题,比如Android的写入权限是否需要申请,或者iOS的文件共享设置。 此外,可能需要补充一些注意事项,比如WebGL平台路径限制,以及如何在这些平台上处理文件读写。还有路径的访问方式,比如是否需要使用文件协议(file://)或者不同的API来读取。 最后,检查是否有遗漏的重要路径属性,确保覆盖用户可能关心的所有路径。同时,语言要清晰,结构分明,便于用户理解和使用。</think>Unity中`Application`类提供了多个关键路径属性,以下按使用场景和平台差异进行说明: --- ### 一、核心路径属性 #### 1. **Application.dataPath** - **用途**:只读路径,存放项目资源文件(Assets文件夹内容) - **路径示例**: - 编辑器:`项目根目录/Assets` (如:`C:/Project/Assets`) - Android:APK包内路径(不可写) - iOS:`xxx.app/Data`(只读) - **使用场景**:读取初始资源(如配置文件、预制体) #### 2. **Application.streamingAssetsPath** - **用途**:存放无需编译的原始资源(如视频、JSON) - **读取方式**: - Android/iOS:需用`UnityWebRequest`或`WWW`类 - 编辑器/Windows:直接`File.ReadAllText()` - **路径示例**: - Android:`jar:file:///data/app/xxx.apk!/assets` - iOS:`Application/xxx.app/Data/Raw` #### 3. **Application.persistentDataPath** - **用途**:读写用户数据(跨会话保存) - **路径示例**: - Windows:`C:/Users/用户名/AppData/LocalLow/公司名/产品名` - Android:`/data/data/包名/files` - iOS:`Application/xxx/Documents` - **使用场景**:存档、用户配置、下载内容 --- ### 二、辅助路径 #### 4. **Application.temporaryCachePath** - **用途**:临时文件存储(系统可能自动清理) - **示例**: - iOS:`Application/xxx/Library/Caches` - Android:`/data/data/包名/cache` #### 5. **Application.consoleLogPath** (仅部分平台) - **用途**:输出日志文件路径 - **支持平台**:Xbox One, PS4等主机平台 --- ### 三、跨平台注意事项 | 路径类型 | Windows | Android | iOS | WebGL | |------------------------|---------|--------------|--------------|-----------| | **dataPath** | ✔️读写 | ❌只读 | ❌只读 | ❌只读 | | **persistentDataPath** | ✔️读写 | ✔️需权限 | ✔️需文件共享 | ✔️IndexedDB| --- ### 四、典型代码示例 ```csharp // 读取StreamingAssets资源 IEnumerator LoadConfig() { string path = Path.Combine(Application.streamingAssetsPath, "config.json"); #if UNITY_ANDROID && !UNITY_EDITOR using (UnityWebRequest www = UnityWebRequest.Get(path)) { yield return www.SendWebRequest(); string data = www.downloadHandler.text; } #else string data = File.ReadAllText(path); #endif } // 保存用户数据 void SaveGame() { string savePath = Path.Combine(Application.persistentDataPath, "save.dat"); File.WriteAllText(savePath, JsonUtility.ToJson(gameData)); } ``` --- ### 五、最佳实践建议 1. **敏感数据加密**:persistentDataPath存储用户数据时建议加密 2. **Android权限**:写入外部存储需`WRITE_EXTERNAL_STORAGE`权限 3. **iOS文件共享**:启用`Application supports iTunes file sharing`以显示文件在iTunes 4. **路径拼接**:始终使用`Path.Combine()`避免斜杠问题 如需处理平台特定路径问题,可通过`RuntimePlatform`进行分支处理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值