之前一直是PC项目,公司终于考虑移动平台了,但是试验了几把,感觉移动平台资源管理路径还是有很多隐藏的注意事项。
比如在PC上可以做到随便读写,但是在移动平台就涉及到权限问题。
看到小伙伴的总结,还是要记录一下,好记性不如烂笔头啊,主题如下:
1.Unity的资源数据加载
2.Resource、StreamingAsset文件夹,安装后的路径(Android,iOS)
3.Unity在打包和安装的时候怎么处理persistentDataPath
4.Unity的Android和IOS上相关的目录结构
5.Unity常用目录对应的Android && iOS平台地址
下面开始细说具体的注意事项>>>>>>>>>>>>
1.Unity的资源数据加载 - Resources、AssetBundle、StreamingAsset、PersistentDataPath
Resources目录
- 打包集成到.asset文件里面及引用的资源as后se一个文件里面面
- 主线程加载
- 想要动态更新资源则不考虑
AssetBundle
- unity定义的二进制文件类型
- 用WWW类下载
StreamingAssets目录
- 可读不可写
- 内容限制 - 无
- 只能用WWW类下载
PersistentDataPath目录
- 可读可写
- 内容限制 - 无
- 清除手机缓存文件会一并清理这里的东西
- 随意弄,可作为本地目录让WWW下载、也可以自己用FileInfo 或者FileStream读写;
private void WriteCfg(string content) { string targetPath = Application.persistentDataPath + "/cfg.txt"; StreamWriter sw; FileInfo t = new FileInfo(targetPath); if (!t.Exists) { //如果此文件不存在则创建 sw = t.CreateText(); } else { //如果此文件存在则打开 sw = t.AppendText(); } //以行的形式写入信息 sw.WriteLine(content); sw.Close(); sw.Dispose(); }
FileStream fs = new FileStream(targetPath, FileMode.Create, FileAccess.ReadWrite); fs.Write(www.bytes, 0, www.bytes.Length); fs.Flush(); fs.Close();
2.Resource、StreamingAsset文件夹,安装后的路径(Android,iOS)
StreamingAsset
-PC:Application.dataPath + "/StreamingAssets";
- iOS : Application.dataPath + “/Raw”;
- Android : jar:file:// + Application.dataPath + !/assets/
Unity目前在Android平台也直接提供jar:file的格式,无需自己添加,直接使用:
只能通过www读取,因为该文件夹在jar包内部,协议是jar:file:// ,Application.streamingAssetsPath返回的路径会自动添加该协议。
public string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "MyFile"); public string result = ""; IEnumerator Example() { if (filePath.Contains("://")) { WWW www = new WWW(filePath); yield return www; result = www.text; } else result = System.IO.File.ReadAllText(filePath); }
Resources
- 打包成一个Asset文件
3.Unity在打包和安装的时候怎么处理PersistentDataPath
- PersistentDataPath- 就是com.**.**/files 的路径而已
比如Android发布导出设置 write acess选择SD Card,否则就失去了读写的意义,www读取,stream读写。
注意,WWW加载时 Application.persistentDataPath返回的路径不会自动添加协议,需要手动添加,协议是file://而不是jar:// 因为导出包是外面的SD卡。
该目录会在SD卡中暴露出来,无需root权限,属于本地文件,可以直接在手机文件管理中看到,因此也需要本地文件协议file://读取,日志可以写于此处。
4.Unity的Android和IOS上相关的目录结构
Android:
- assets 游戏内容相关的都在这里了
- lib JNI相关的东西
- META-INF Java包跟rar包的区别
- res 图标之类的
- AndroidManifest.xml Android配置文件
- classes.dex Java虚拟机runtime的东西
- resources.arsc Java编译后的二进制文件
IOS:
- level0/level1… Scene
- sharedassets0/shaedassets1/… Scene相关的东西
- Managed 脚本编译后的dll
- resources.assets Resources里面的东西
- Raw StreamingAssets里面的东西
5. Unity常用目录对应的Android && iOS平台地址
IOS:
Application.dataPath : Application/xxxxx/xxx.app/Data
Application.streamingAssetsPath : Application/xxxxx/xxx.app/Data/Raw
Application.persistentDataPath : Application/xxxxx/Documents
Application.temporaryCachePath : Application/xxxxx/Library/Caches
Android:
Application.dataPath : /data/app/xxx.xxx.xxx.apk
Application.streamingAssetsPath : jar:file:///data/app/xxx.xxx.xxx.apk/!/assets
Application.persistentDataPath : /data/data/xxx.xxx.xxx/files
Application.temporaryCachePath : /data/data/xxx.xxx.xxx/cache
转自Unity3D吧,以上内容仅做参考,最新使用规范参见官方地址:
http://docs.unity3d.com/ScriptReference/Application-dataPath.html