用lua就表示项目用到了热更新,通常每次热更新都会从服务器获取最新的lua脚本放到Android/ios设备的本地目录下,但是lua应该放到哪个目录下呢,这里就先说说lua里面的路径问题

1、不可以放到Resources文件夹下,因为无法找到其在设备下的位置,Resources下的东西是由unity来管理的,使用的时候通过Resources.load/loadAll来加载,而且后缀为lua的文件,无法通过Resources来加载

2、不可以放到StreamingAssets文件夹,因为在设备下StreamingAssets文件夹里面的资源只能读,不能写,当我们热更新最新的资源的时候,是不好操作的!而且StreamingAssets文件夹下的东西最终在生成apk的时候会被unity打包进一个叫pkg.apk的apk安装包里,解压这个pkg.apk可以看到StreamingAssets文件夹下的资源,pkg.apk是存在于应用的安装目录下的,是应用的资源文件,unity中设置应用的安装目录是由设置PlayerSettings下的Install Location来设置的,Install Location设置为Perfer External(优先安装到外部设备,也就是sdcard),安装此包,用文件查看器查看才能看到此应用的安装目录(通常在/mnt/asec目录下),但是没有sdcard的手机貌似即使选项设置为了Perfer External也是看不到此应用的相关安装目录的,通常如下:  

com.zwh.p1是我的包名,安装目录的名称通常是(应用的包名-数字),此安装目录默认是不能删除的,如果通过第三方软件强制删除,那么相对应的应用就会再也用不起来了(应用的数据文件被破坏),

如果程序就是安装到外部,那么都是能看到他的安装目录的,其他应用也是如此:

如果Install Location设置为Force Internal(强制安装到手机内存),那么是看不到程序的安装文件的!

如何访问StreamingAssets文件下的资源:

        string GetStreamingAssetsPath()
        {
              return
            #if UNITY_ANDROID
                //"jar:file://" + Application.dataPath + "!/assets/";
                UnityEngine.Application.streamingAssetsPath+"/";
            #elif UNITY_IPHONE
            Application.dataPath + "/Raw/";
            #elif UNITY_STANDALONE_WIN || UNITY_EDITOR
            "file://" + Application.dataPath + "/StreamingAssets/";
            #else
            string.Empty;
            #endif
        }
WWW www=new WWW("file://c:/a1.lua");

//使用上面的方式加载c盘的lua文件时,是加载不出来的

WWW www=new WWW("file:///c:/a1.lua");

//加个斜杆/ 即可!

当我把一个lua文件放到unity下StreamingAssets文件夹里,然后通过如上代码去访问这个lua文件,打印访问的路径如下:

路径 = jar:file:///mnt/asec/com.zwh.p1-1/pkg.apk!/assets/mi.lua

由此可见,StreamingAssets文件夹下的资源被打包进了pkg.apk这个安装包里去了!

3、先看看unity中几个路径有关的类,在android平台输出的路径为什么

Debug.Log ("temporaryCachePath = " + UnityEngine.Application.temporaryCachePath);   //temporaryCachePath = /storage/sdcard0/Android/data/com.zwh.p1/cache
Debug.Log ("dataPath = " + UnityEngine.Application.dataPath);                       //dataPath = /mnt/asec/com.zwh.p1-2/pkg.apk
Debug.Log ("persistentDataPath = " + UnityEngine.Application.persistentDataPath);   //persistentDataPath = /storage/sdcard0/Android/data/com.zwh.p1/files
Debug.Log ("streamingAssetsPath = " + UnityEngine.Application.streamingAssetsPath); //streamingAssetsPath = jar:file:///mnt/asec/com.zwh.p1-2/pkg.apk!/assets

可以看出dataPath和streamingAssetsPath指的是程序安装的位置,而temporaryCachePath和persistentDataPath指的则是sdcard的位置,所以可以选择这两个路径作为存放lua文件的地方,

前提是unity出包的时候,要设置Playersettings下Write Access为External(SDCard),不然这两个路径的位置是不一样的!

最新文章

  1. Qt里的slot
  2. CSS3判断手机横屏竖屏
  3. 顺序表及其多种实现方式 --- C/C++
  4. IIS6.0服务器完美开启Gzip压缩[转]
  5. BS与CS的比较
  6. jquery.post用法
  7. history对象back()、forward()、go()
  8. UTF8国际通用为什么还要用GBK?
  9. BZOJ:1185: [HNOI2007]最小矩形覆盖
  10. FIFO IP核仿真
  11. 手机Gmail上用Exchange协议配置收发QQ邮箱
  12. 用.Net如何访问Linux下目录
  13. 07Vue.js快速入门-Vue路由详解
  14. HDU 1686 Oulipo / POJ 3461 Oulipo / SCU 2652 Oulipo (字符串匹配,KMP)
  15. 手机WiFi万能钥匙查看破解的password和手机查询命令收集
  16. [BZOJ2429][HAOI2006]聪明的猴子(最小生成树)
  17. poj1228稳定凸包
  18. How to design a product table for many kinds of product where each product has many parameters
  19. android 进制转换方法
  20. c printf打印格式

热门文章

  1. 【luogu P3369 【模板】普通平衡树(Treap/SBT)】 题解 pb_ds
  2. Android学习笔记_35_PopupWindow泡泡窗口的实现及GridView应用
  3. python—递归函数
  4. 微信小程序【消息推送服务器认证C# WebAPI】
  5. sudo cd的错误
  6. SpringBoot非官方教程 | 第十九篇: 验证表单信息
  7. Oracle listener.log 清理
  8. etcd客户端c#
  9. c# 任务超时执行
  10. SmallMQ发布