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. 使用Xcode 5创建Cocoa Touch Static Library(静态库)

    转自:http://blog.csdn.net/jymn_chen/article/details/21036035 首先科普一下静态库的相关知识: 程序编译一般需经预处理.编译.汇编和链接几个步骤. ...

  2. AAuto 快速开发win32小程序

    AAuto编程语言 AAuto是专用于桌面软件快速开发的新一代混合型编程语言 -  具有动态语言轻便.灵活.快速开发的特性,而且又可以同时支持静态类型开发,象静态语言那样使用.AAuto可以直接支持原 ...

  3. SpringCloud重试机制配置

    SpringCloud重试retry是一个很赞的功能,能够有效的处理单点故障的问题.主要功能是当请求一个服务的某个实例时,譬如你的User服务启动了2个,它们都在eureka里注册了,那么正常情况下当 ...

  4. stock article

    stock 征服星辰大海 http://www.tianya.cn/95789158 论坛_悟道股市_天涯社区 http://www.tianya.cn/108318593/bbs?t=post 当下 ...

  5. python+spark程序代码片段

    处理如此的字符串: time^B1493534543940^Aid^B02CD^Aasr^B叫爸爸^Anlp^B{"domain":"com.abc.system.cha ...

  6. sqlserver 多排序的问题

    sql 执行默认执行排序的第一个字段,如果结果集中含有重复的列的字段,才会按照2...N个字段进行排序,没有重复列多排序无效果

  7. wp中的双向绑定

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; usin ...

  8. 解决 Plugin with id 'com.github.dcendents.android-maven' not found.

    在Android studio中引用第三方库的时候,报这个错. Error:(2, 0) Plugin with id 'com.github.dcendents.android-maven' not ...

  9. linux中的ll(转)

    linux中的ll(转) 操作系统:ubuntu 9.04 ll并不是linux下一个基本的命令,它实际上是ls -l的一个别名. Ubuntu默认不支持命令ll,必须用 ls -l,这样使用起来不是 ...

  10. MySQL命令学习(二)

    (13)where字句操作符 =            等于 <>          不等于 !=           不等于 <            小于 >        ...