之前一直是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, , 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

Unity3d各平台资源路径文件夹的更多相关文章

  1. Unity3d中所有特殊的文件夹

    1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor  和 /Editor 是一样的,无论多少个叫Editor的 ...

  2. Unity3D引擎中特殊的文件夹

    Editor Editor文件夹可以在根目录下,可以在子目录里,只要名是Editor就可以./xxx/xxx/Editor  和 /Editor 是一样的,多少个叫Editor的文件夹都可以.Edit ...

  3. springboot打包后静态资源webapp文件夹无法打包进去

    1.如下图的目录结构 webapp 文件夹和resources 文件夹同级.使用mvn clean install 打包过后项目启动访问,静态资源页面404. 2.原因,springboot 打包时候 ...

  4. VS2017开发.net core 时默认发布路径文件夹多个BPC

    新安装的VS2017,编译后进行发布,结果在bin文件夹下多了个BPC文件夹,很是费解,查了资料才知道是VS2017默认设置了环境变量.在此记录下,如果不需要默认路径可修改环境变量,具体操作如下: 我 ...

  5. 使用C#读取网站相对路径文件夹下所有图片

    public JsonResult GetCourseInitCover() { //设置相对路径 string imgurl = Server.MapPath("~/Content/ima ...

  6. java判断指定路径文件夹是否存在,若不存在则创建新的文件夹

    File file = new File(dirPath); if (!file.exists()) { file.mkdirs(); }

  7. SpringBoot-(10)配置虚拟路径-指定外部路径文件夹存取文件

    参考:https://blog.csdn.net/feng2147685/article/details/95623135 package com.online.director; import or ...

  8. Unity3D移动平台动态读取外部文件全解析

    前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑 ...

  9. (转)Unity3D移动平台动态读取外部文件全解析

    Unity3D移动平台动态读取外部文件全解析 c#语言规范 阅读目录 前言: 假如我想在editor里动态读取文件 移动平台的资源路径问题 移动平台读取外部文件的方法 补充: 回到目录 前言: 一直有 ...

随机推荐

  1. C#类和成员的修饰符

    C#中public.private.protected.internal.protected internal & (2010-09-22 13:33:45)转载 标签: 杂谈 分类: C# ...

  2. jquery通过ajax方法获取json数据不执行success

    1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...

  3. 求平均排序MATLAB code

    A0=R(:,1:2:end); for i=1:17 A1=A0(i,:); p=sort(unique(A1)); for j=1:length(p) Rank0(A1==p(j))=j; end ...

  4. 生成json对象

    JSONObject 对于放入的object,最终生成的json是什么样的? 两个JavaBean: public class ClassBean { private int grade; priva ...

  5. javascript 判断身份证的正确性

    function isIdCardNo(vals) { var cardNum = vals; if (cardNum.length == 0) { return true; } // 11-15,2 ...

  6. JBOss启动只能在本机访问的解决办法

    环境CentOS6.4_X64 JBoss:5.1.2 eap 启动:JBOSS_HOME/bin/run.sh 在本机可以通过http://localhost:8080访问,而其他机器无论是通过机器 ...

  7. 用户上网的基本流程图与DNS解析原理

    1.用户上网发送请求,首先确认本地的hosts中是否含有域名,有则进行ip访问,如果没有呢?看本机的display缓存中有没有访问网站的ip,有就直接去访问 那么如果本地的hosts和缓存都没有呢?这 ...

  8. easyui layout 收缩的bug

    easyui layout提供collapse方法折叠指定的 panel,'region' 参数可能的值是:'north'.'south'.'east'.'west',但是在 IE6的环境下,调用这个 ...

  9. Linux 服务器安全技巧

    毋庸置疑,对于系统管理员,提高服务器的安全性是最重要的事情之一.因此,也就有了许多针对这个话题而生的文章.博客和论坛帖子. 一台服务器由大量功能各异的部件组成,这一点使得很难根据每个人的需求去提供定制 ...

  10. java中的日志组件-log4j

    1.为什么使用日志组件 Log4J是Apache的一个开放源代码项目,它是一个日志操作包,通过使用Log4J,可以指定日志信息输出的目的地,如控制台.文件.CUI组件.NT的事件记录器:还可以控制每一 ...