您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 程序开发 > 开发经验 >
    手机上的路径
    时间:2014-11-19 15:09 来源:互联网 作者:网络 浏览:收藏 挑错 推荐 打印

    Application.dataPath路径在PC上无论是Editor还是运行时都是毫无眼里,非常万能。但是在手机上他却完全无用。手机上有两个很重要的路径:Application.streamingAssetsPath和Application.persistentDataPath。

    1.Application.streamingAssetsPath

        它是一个只读路径,游戏运行中程序只能对他进行读取,并无法写入。在unity的Assets/目录下起一个叫StreamingAssets的文件夹即可。一般可以把一些预制的2进制文件放在里面,我个人觉得如果是assetbundle最好不要放在里面,因为用WWW把本地的assetbundle读取后,会将解压后的资源放在cache里面,但是由于StreamingAssets文件夹是只读文件,所以你没法删除它,那么应用程序就会更加占用空间。举个例子,就好比你在电脑上解压一个.zip文件,那么其实你只需要使用解压后的文件。但是原始用.zip文件如果还保留在文件夹西安,那么容量就更大了。痛仰的assetbundle如果放在CDN上去下载,那么你本地就不会保留这个多余的assetbundle文件,而是直接把解压后的资源保存在了cache中。

        如果你坚持要把assetbundle放在streamingAssets文件夹下,我觉得一定要做好加密工作。因为把你的.ipa或者.apk下载后都不用破解资源直接可以把你的assetbundle原封不动的取出来。。。

    2.Application.persistentDataPath

        它是一个可以读、写的路径,在IOS上就是应用程序的沙盒。而在Android可以使程序的沙盒,也可以是sdcard,在打包Android的时候,ProjectSetting页面有一个选项Write Access,可以设置他的路径是沙盒还是sdcard。

        如果你在这个路径下写入文件后,IOS上可以通过同步推一类的助手直接取出来写入文件。在Android上如果你设置保存在沙盒中,那么就必须root才能取出文件。不过建议你最好设置写入sdcard里,这样就不用root也可以在电脑上访问文件。假设安装的手机没有sdcard,或者sdcard被锁住(有的Android手机插拔USB会锁一下sdcard),那么他会自动指向你的应用程序沙盒路径。

        我觉得它的最大缺点就是只能运行时才能写入或者读取,假设你想在打包前写入一些二进制文件在persistentDataPath里面是不行的。假设你要写Android的交互插件,那么.java类中是无法访问unity里面的资源的。但是有一个办法,如下代码,图片放在Resources文件夹下,比如在Awake()方法中把二进制文件拷贝在persistentDataPath下面,这样C# Java两边就都可以访问它了。


    // 拷贝图片

    string imagePath=Application.persistentDataPath+"/image.png";

    if(!System.IO.File.Exists(imagePath))
    {
        Texture2D tex=Resources.Load("image") as Texture2D;
        System.IO.File.WriteAllBytes(imagePath,tex.EncodeToPNG());
    }


    或者是streamingAssetsPath目录下的资源也可以通过这种方法考北大sdcard中

    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。