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. Cocos2dx Label

    cocos2dx3.0添加了一种新的文本标签,这种标签不同的地方有:使用freetype来使它在不同的平台上有相同的视觉效果:由于使用更快的缓存代理,它的渲染也将更加快速:同时它还提供了绘边.阴影等特 ...

  2. 每日英语:Mooncake Austerity Hits China's Mid-Autumn Festival

    First baijiu, then red carpets, and now mooncakes. For Chinese government officials, the list of tab ...

  3. iOS开发之弹出输入框

    最近项目里有个需求要弹出输入框,GitHub上搜了一圈没发现太合适的轮子,就自个儿撸了一个,传送门在这里https://github.com/wozyao/ZYInputAlert,有需要的同学可以d ...

  4. zookeeper 大量连接断开重连原因排查

    转自:http://blog.csdn.net/hengyunabc/article/details/41450003?utm_source=tuicool&utm_medium=referr ...

  5. Cannon

    Description In Chinese Chess, there is one kind of powerful chessmen called Cannon. It can move hori ...

  6. pionter指针小结

    第七章.指针和函数的关系 可以把一个指针声明成为一个指向函数的指针. intfun1(char*,int); int(*pfun1)(char*,int); pfun1=fun1; .... .... ...

  7. Ubuntu下安装Apache

    Ubuntu为我们提供了 su apt-get install 命令,通过它你可以很方便地安装一些软件,这些软件是放在Ubuntu放置在各个地方的服务器上面,如果你想安装的软件是比较常见的,一般都可以 ...

  8. uboot在nandflash存储时内存和NandFlash存储空间

    硬件采用nandflash,nandflash为8位数据宽度,没有dataflash和norflash. Nandflash空间分配为 bootstrap + u-boot + env + linux ...

  9. MySQL做为手动开启事务用法

    START TRANSACTION;INSERT INTO `t1` (t, t1) VALUES('124', NOW());ROLLBACK;COMMIT;

  10. else好像必须做点什么,可以省点资源不做什么吗,else下不能用pass

    portfolio = [ {'name': 'IBM', 'shares': 100, 'price': 91.1}, {'name': 'AAPL', 'shares': 50, 'price': ...