Unity3D中的资源路径: Application.dataPath:此属性用于返回程序的数据文件所在文件夹的路径。例如在Editor中就是Assets了。

Application.streamingAssetsPath:此属性用于返回流数据的缓存目录,返回路径为相对路径,适合设置一些外部数据文件的路径。

Application.persistentDataPath:此属性用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件。

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

IOS平台

Application.dataPath: Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data Application.streamingAssetsPath: Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw Application.persistentDataPath: Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents Application.temporaryCachePath Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches 从上面的3张表格,我们可以看到 dataPath和streamingAssetsPath的路径位置一般是相对程序的安装目录位置,而

persistentDataPath和temporaryCachePath的路径位置一般是相对所在系统的固定位置

简单介绍一下unity3d中资源的处理种类(欢迎拍砖):

小匹夫遇到过的大体就是如下几种了,Resources、StreamingAssets、AssetBundle、PersistentDataPath,下面简单分析一下。

Resources:

是作为一个Unity3D的保留文件夹出现的,也就是如果你新建的文件夹的名字叫Resources,那么里面的内容在打包时都会被无条件的打

到发布包中。它的特点简单总结一下就是:

1只读,即不能动态修改。所以想要动态更新的资源不要放在这里。 2会将文件夹内的资源打包集成到.asset文件里面。因此建议可以放一些Prefab,因为Prefab在打包时会自动过滤掉不需要的资源,有

利于减小资源包的大小。 3主线程加载。 资源读取使用Resources.Load()。

StreamingAssets:

要说到StreamingAssets,其实和Resources还是蛮像的。同样作为一个只读的Unity3D的保留文件夹出现。不过两者也有很大的区别,

那就是Resources文件夹中的内容在打包时会被压缩和加密。而StreamingAsset文件夹中的内容则会原封不动的打入包中,因此

StreamingAssets主要用来存放一些二进制文件。下面也同样做一个简单的总结:

1同样,只读不可写。 2主要用来存放二进制文件。 3只能用过WWW类来读取

AssetBundle:

简而言之就是把prefab或者二进制文件封装成AssetBundle文件(也是一种二进制)。但是也有硬伤,就是在移动端无法更新脚本。下

面简单的总结下:

1是Unity3D定义的一种二进制类型。 2最好将prefab封装成AseetBundle,不过上面不是才说了在移动端无法更新脚本吗?那从Assetbundle中拿到的Prefab上挂的脚本是不

是就无法运行了?也不一定,只要这个prefab上挂的是本地脚本,就可以。 3使用WWW类来下载。

PersistentDataPath:

看上去它只是个路径呀,可为什么要把它从路径里面单独拿出来介绍呢?因为它的确蛮特殊的,这个路径下是可读写。而且在IOS上就

是应用程序的沙盒,但是在Android可以是程序的沙盒,也可以是sdcard。并且在Android打包的时候,ProjectSetting页面有一个选项

Write Access,可以设置它的路径是沙盒还是sdcard。下面同样简单的总结一下:

1内容可读写,不过只能运行时才能写入或者读取。 提前将数据存入这个路径是不可行的。 2无内容限制。你可以从 StreamingAsset 中读取二进制文件或者从 AssetBundle 读取文件来写入 PersistentDataPath 中。 3写下的文件,可以在电脑上查看。同样也可以清掉。

移动平台读取外部文件的方法

上文小匹夫之所以要介绍Resources、StreamingAssets、AssetBundle、PersistentDataPath这四个东东,就是因为读取外部资源的操

作所涉及到的东西无外乎这几种。既然是用Unity3D来开发游戏,那么自然要使用Unity3D规定的操作方式,而不是我们在PC上很原始的

那种操作方式来操作咯。否则就会像本文一开始所演示的那样,写出移动端无法使用的很傻的代码来。

下面小匹夫就分别实现一下利用Resources、StreamingAssets、AssetBundle来读取的过程。

Resources:

private string _result;  // Use this for initialization  void Start () {   LoadXML("Test");  }  // Update is called once per frame  void Update () {  }  private void LoadXML(string path)  {   _result = Resources.Load(path).ToString();   XmlDocument doc = new XmlDocument();   doc.LoadXml(_result);  }  void OnGUI()  {   GUIStyle titleStyle = new GUIStyle();    titleStyle.fontSize = 20;    titleStyle.normal.textColor = new Color(46f/256f, 163f/256f, 256f/256f, 256f/256f);    GUI.Label(new Rect(400, 10, 500, 200),  _result,titleStyle);  }

StreamingAssets:

同Resources一样,我们要新建一个StreamingAssets的文件夹来存放我们的Test.xml文件。如图: 不过前文已经说了,StreamingAssets文件夹内的东西并不会被压缩和加密,而是放进去什么就是什么,所以一般是要放二进制文件的

,这里小匹夫仅仅做一个演示,各位在实际操作中切记不要直接把数据文件放到这个目录中打包。

private string _result;  // Use this for initialization  void Start () {   StartCoroutine(LoadXML());  }  // Update is called once per frame  void Update () {  }  /// <summary>  /// 如前文所述,streamingAssets只能使用www来读取,  /// 如果不是使用www来读取的同学,就不要问为啥读不到streamingAssets下的内容了。  /// 这里还可以使用了persistenDataPath来保存从streamingassets那里读到内容。  /// </summary>  IEnumerator LoadXML()  {   string sPath= Application.streamingAssetsPath + "/Test.xml";   WWW www = new WWW(sPath);   yield return www;   _result = www.text;  }  void OnGUI()  {   GUIStyle titleStyle = new GUIStyle();    titleStyle.fontSize = 20;    titleStyle.normal.textColor = new Color(46f/256f, 163f/256f, 256f/256f, 256f/256f);    GUI.Label(new Rect(400, 10, 500, 200),  _result,titleStyle);  }

AssetBundle:

来到AssetBundle,这里就和上面两个不一样了。首先我们要把我们的文件Test.xml打成AssetBundle文件,由于小匹夫使用的是小米3

作为测试机,所以AssetBundle的平台选择为Andorid。

如图,我们创建了一个AssetBundle文件,并命名为TextXML。并且按照二进制文件放入StreamingAssets文件夹中的惯例,将这个

AssetBundle文件放入StreamingAssets文件夹。

private string _result;  // Use this for initialization  void Start () {   LoadXML();  }  // Update is called once per frame  void Update () {  }  void LoadXML()  {   AssetBundle AssetBundleCsv = new AssetBundle();   //读取放入StreamingAssets文件夹中的bundle文件   string str = Application.streamingAssetsPath + "/" + "TestXML.bundle";   WWW www = new WWW(str);   www = WWW.LoadFromCacheOrDownload(str, 0);    AssetBundleCsv = www.assetBundle;   string path = "Test";   TextAsset test = AssetBundleCsv.Load(path, typeof(TextAsset)) as TextAsset;   _result = test.ToString();  }  void OnGUI()  {   GUIStyle titleStyle = new GUIStyle();    titleStyle.fontSize = 20;    titleStyle.normal.textColor = new Color(46f/256f, 163f/256f, 256f/256f, 256f/256f);    GUI.Label(new Rect(400, 10, 500, 200),  _result,titleStyle);  }

Unity文件操作路径的更多相关文章

  1. 【Unity系统知识】之unity文件操作路径

    IOS:Application.dataPath :                      Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx ...

  2. (转) unity 在移动平台中,文件操作路径详解

    http://www.unitymanual.com/thread-23491-1-1.html 今天,这篇文章其实是个老生常谈的问题咯,在网上类似的文章也比比皆是,在此我只是做个详细总结方便大家能够 ...

  3. unity 在移动平台中,文件操作路径详解

    今天,这篇文章其实是个老生常谈的问题咯,在网上类似的文章也比比皆是,在此我只是做个详细总结方便大家能够更好.更快的掌握,当然,如有不足的地方 欢迎指正!!! 相信大家在开发过程中,难免会保存一些文件在 ...

  4. C++常用的文件操作路径函数

    shlwapi.dll中的实用API函数发布 在windows   system目录下有这个动态链接库  BOOL PathFileExists(LPCTSTR lpszPath)功能:检查文件/路径 ...

  5. php基础知识--文件操作

    文件操作 文件 广义角度: 任何一个在磁盘上可以看到的符号(包含真正的文件及文件夹) 狭义角度: 真实存储数据的载体(不包含文件夹, 如doc文件,txt文件等) 文件操作: 对文件的增删改查 文件分 ...

  6. path类和directory类对文件的路径或目录进行操作

    Path: 对文件或目录的路径进行操作(很方便)[只是对字符串的操作] 1.目录和文件操作的命名控件System.IO    2.string Path.ChangeExtension(string ...

  7. C# 文件与路径操作

    OpenFileDialog private void btnOpenFileDialog_Click(object sender, EventArgs e) { OpenFileDialog ope ...

  8. .net持续集成cake篇之常见文件及路径操作

    系列目录 Cake常见文件和路径操作 在自动化构建任务里,很多操作都是跟文件打交道,比如文件打包,文件压缩,文件归档,文件传输,目录清理等.本节介绍一些cake里常见的文件操作方法 Cake相对路径问 ...

  9. 使用 ProcessMonitor 找到进程所操作的文件的路径

    原文:使用 ProcessMonitor 找到进程所操作的文件的路径 很多系统问题都是可以修的,不需要重装系统,但是最近我还是重装了.发现之前正在玩的一款游戏的存档没有了--因为我原有系统的数据并没有 ...

随机推荐

  1. eclipse workspace 优化

    换了新的工作空间,当然在开发之前先优化该工作空间啦! 1.换编码 2.优化加载项 去除不用的 3.优化代码检查   不用的去掉 4.禁止更新功能 5.更换字体其他个人偏好设置   微软雅黑 字体5号 ...

  2. Python中写一个乒乓球类的游戏

    最近开始学Python,感觉挺好玩的,既有脚本语言的灵活性,又有丰富的类库与面向对象的特点,开发起来很方便. 游戏的规则和乒乓球一样,如果妙蛙种子掉地上了就算输,你可以用蓝色的跷跷板弹它,使他不落到地 ...

  3. Java程序员应该了解的10个设计原则

    引用: http://www.cnblogs.com/leehongee/archive/2012/03/18/2404760.html 面向对象设计原则是OOPS(Object-Oriented P ...

  4. 完成wamp安装后Mysql配置记录

    注意:下面如没有特殊说明,默认都是修改my.ini配置,修改完配置需要重启mysql服务. 1.安装完wamp后输入命令有乱码提示: 运行mysql命令时,出现的错误提示是乱码 :    ERROR ...

  5. Maven学习之(四)Maven插件创建web项目

    另一种maven web项目的创建. 创建出来的目录是这样的,此时试一下,不能加入到tomcat中去启动. 这里要将项目转化为web项目. 右键->项目 选中下面的动态web项目,然后OK 此时 ...

  6. Postgres数据库备份与还原命令

    备份 pg_dump.exe -c -b -E UTF8 -U postgres -h 127.0.0.1 -p 5432 -f "f:\testdb001.bak" testdb ...

  7. Oracle主表列表上显示从表字段拼成的字符串

    select t.*,t1.person_names from itil_duty_group t ,( select p.duty_group_id, WMSYS.WM_CONCAT(p.perso ...

  8. RP2833 指示灯说明

    ARM-IO9           OUT0        PA8 备用 P5-A4管脚,可以连接74HC164D级联 ARM-IO10         OUT7        PA1       3 ...

  9. C语言实现---学生成绩管理系统

    C语言实现了学生成绩管理系统,可以进行学生成绩的增加,删除,更新,查询,计算和展示. 完整代码如下: #include<stdio.h> #include<stdlib.h> ...

  10. LintCode - Copy List with Random Pointer

    LintCode - Copy List with Random Pointer LintCode - Copy List with Random Pointer Web Link Descripti ...