项目用的是xlua 采用自定义加载方式
使用File去读取路径下的文件,lua文件本来放在了StreamingAssets路径下
PC运行无问题,发布安卓后,居然提示路径不存在。
查了下资料后发现,File的这种操作方式无法在安卓平台去读取StreamingAssets路径下的文件,见鬼
这个路径只能用来AssetBundle.LoadFromFile来进行操作
资料参考:http://www.xuanyusong.com/archives/4033
如果真的想用File这种方式来读取的话,那么就不要把文件放在StreamingAssets路径下了
只能把lua放在Application.persistentDataPath; 这个路径下,我还是手动拷贝到安卓上的,确实可以做到再安卓上可以看见这个文件
(我在模拟器上面找到了这个路径,在小米手机上居然没有找到这个路径 = = )
这种可以制作手机上的自定义脚本游戏,感觉不错。
后来的解决方案是,把lua加上txt后缀,然后ab打包放在StreamingAssets路径下,就可以用AssetBundle.LoadFromFile来进行操作了
【代码】
1 void RequireLua(string name) { 2 TextAsset luaCode = bundle.Load(name, typeof(TextAsset)) as TextAsset; 3 lua.DoString(luaCode.text); 4 }
感觉不错,比我的要方便,之前用的大奥的那个lua框架,不是很好用,关键是没理解他的那种写法,那么我可以去借鉴上面代码的写法
【其他参考资料】
unity 在移动平台中,文件操作路径详解:http://blog.csdn.net/huang9012/article/details/44308743
Unity中的Path对应各平台中的Path :http://www.manew.com/forum.php?mod=viewthread&tid=21404&extra=page%3D1%26filter%3Dtypeid%26typeid%3D143
优秀程序员的博客有哪些?:https://www.zhihu.com/question/19934502
【可能会用到的再度优化】保留.lua后缀名,将lua文件打包成assetbundle:http://blog.csdn.net/musicseli/article/details/46415075
【检测更新,AB加密】Unity手游之路<十二>手游资源热更新策略探讨:http://blog.csdn.net/janeky/article/details/17666409
【Unity资源处理机制(Assets/WWW/AssetBundle/...)读取和加载资源方式详解】:http://blog.csdn.net/swj524152416/article/details/54022282
============================================================================10月9日更新=========================================================================================
把lua打包成assetbundle,此时注意后缀为lua还无法打包
xlua写成 .lua.txt才可以打包
不过写成了这样后,lua脚本中的require关键字里面引用的路径在ab中就没啥用了,此时让lua去调用c#中的自定义加载lua方法来加载lua,以此达到require的目的
值得注意的是,之前我的代码里面写的是一当require的话会自动调用其构造函数,这个是不允许的,需要改下,让其不去调用构造函数