打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ULua热更新提高 <二> 发布到安卓真机开始更新

说实话我看了那么多热更新的文章,感觉说透的真的不多,这个东西出来都好几年了,真的遇到问题,还是得靠这自己去看代码研究,上一篇已经可以做出资源并且打包成游戏了,接下来就是更新了,我建议是自己先搞搞看,搞不出来再去看别人写的文章,会加深你的印象,那我们开始研究吧。

建议一定要在例子的基础上去测试更新,修改弄弄看,不要一上来就自己写,很容易出问题,一大堆问题等着你,按照框架的更新修改测试一下就成功了。例外,我发现unity5.3打包成APK有问题,会报错,但是用5.0就没事,不知道是不是我U3D安装的有问题。


先转载一篇写更新流程的博客,很不错    http://www.xionggf.com/articles/graphic/u3d/ulua_simpleframework_res_download_flow.html


研究了一下,游戏更新是这样的,以PC端为例子,读取文件列表不同以后,会将最新的资源  拷贝一份到 C:\项目名称的文件夹 中,拷贝一份到  缓存 中,好像PC端的更新有问题,它一直读取的都是一开始的缓存,更新下来了以后只更新了C盘的文件夹,并没有更新缓存,造成一直在读取老的缓存,资源也是老的,而且它读取是缓存和本身游戏的StreamingAssets包(游戏里没有就去缓存找,都没有就报错),但是更新只更新C盘的包。有待继续研究。


读取资源的方式是www.LoadFromCacheOrDownload(先去看缓存有没有,没有再下载)这个缓存地址找了我半天,按照网上说的地址也没找到,找了半天终于找到了, 我的电脑是WIN7 64位,它的缓存地址是    C:\Users\Administrator\AppData\LocalLow\Unity\WebPlayer\Cache\DefaultCompany_SimpleFramework


如果在编辑器里并且调试模式,会直接读取工程里的文件。不是调试,会把文件拷贝一份到持久化硬盘里,因为在编辑器里,其实读取的还是工程里的。


一.使用IIS网站更新

测试我就不用服务器了(ULUA框架里自带了Server服务器也可以做更新,具体自己找教程吧),我们要做的就是手机访问工作的电脑上的网站,因为以前做过aspx.NET网站,使用的是IIS管理器,搭建就不说了,不难。唯一需要注意就是 MIME类型,添加了下面这几种格式才有下载权限,如果添加了还下载不下来就要去看网站的读写权限,网站搭建好了以后把StreamingAssets文件夹拖到网站目录下面。

添加:扩展名 .assetbundle    类型application/octet-stream  (类型为字节流)

添加:扩展名 .txt                   类型application/octet-stream

添加:扩展名 .manifest          类型application/octet-stream

添加:扩展名 .(空格)        类型application/octet-stream

添加:扩展名 .lua                   类型application/octet-stream


二.使用官方自带的服务端更新(二选一)

以前是下载的框架里边有个Server文件夹,现在独立出来了一个项目。下载地址:https://github.com/jarjin/ServerFramework

本来不打算用的,后来发现要测试通信还是要个服务端,我蠢了,还是用服务端来做更新吧。

1.客户端修改GameManager.lua里的IP和端口  AppConst.SocketPort = 6688;   AppConst.SocketAddress = "192.168.1.188";

2.服务端修改HttpService.cs的HttpService,写入更新资源服务器地址和端口,重新生成。

3.修改SuperSocket.SocketService.exe.config 配置文件里的Socket地址和端口,serverTypeName="GameManagerService" ip="192.168.1.2" port="6677"

4然后管理员身份打开Server\Server\bin\Debug\SuperSocket.SocketService.exe  ,输入 r 启动服务器

5.把Server文件夹Assets同级,把要更新的资源放到Server\Assets\StreamingAssets文件夹。



三.AppConst.cs代码开启下载

1.在U3D里,AppConst.CS里修改 WebUrl = "http://192.168.1.188/StreamingAssets/"  (如果用服务端:"http://192.168.1.188:6688/";)         切记一定要有最后一个/

   修改DebugMode = false    保持ExampleMode = true(这个地方还有待研究,先不要改容易出问题)

2.切换到安卓项目,打包安卓资源,工程设置:脚本定义符号Scripting Define Symbols----填入 ASYNC_MODE(非必须,看名字是异步模式,具体代码还没看)

代码里使用 ,会根据你不同定义符号编译不同的代码块,没有填写编译符号,就不会编译。  #预编译指令,在编译之前进行

#if   ASYNC_MODE          //if定义了ASYNC_MODE 

(代码块)                          

#elif                                 //其它if

#else                               //其它

(代码块)    

#endif                              //结束if



三.手机访问电脑网站

1,首先手机不能使用127.0.0.1 访问电脑本地的网站,关闭防火墙,就算开启,要开放响应端口,网站是80   

2,得到电脑的局域网IP:Win+R  --- 打开CMD  ---  ipconfig /all  --- 可以查看本机局域网IP地址 比如192.168.1.88

3,(不是必须)可以固定局域网IP,修改IPv4协议

      IP地址  192.168.1.188   子网掩码  255.255.255.0  默认网关192.168.1.1   首选DNS  192.168.1.1(路由器DNS)  备选DNS 114.114.114.114(国内较快)8.8.8.8(谷歌,国外较快)

     


四.手机真机调试

1.可以导出到AndroidStudio,去调试分析

2.查看Debug信息,装有AndroidSdk,里面有adb.exe,安卓的调试工具,直接是打不开的。手机连接电脑 ---- CMD ----   adb logcat -s Unity

如果说adb不是内部或外部命令 也不是可运行程序,要去Path里配置一下环境变量。

3.性能分析,在U3D里生成的时候选择生成选项:Autoconnect profiler,ADB调试方式,自动连接分析器,开启U3D性能分析工具的功能,前期要打开手机开发者选项---USB调试。还可以WIFI调试,Active profiler里选择手机(点击了Build And Run以后会自动打开分析器)

发现错误:Installation failed with the following output:pkg: /data/local/tmp/Package.apk  (手机上已经安卓过一次该应用了,手机上删除就行)

发现错误:Error building Player: UnityException: Unable to install APK! (手机黑屏,锁屏,生成的时候要解锁)


安卓解压资源包的文件目录在Android/data/com.xxx.xxxxx/files/xxxxx  里面。


五.Lua脚本加密

AppConst类  public const bool LuaEncode = true;                        //使用LUA编码

工程外面的LuaEncoder文件夹应该就加密的东西,具体还没研究到这里。


研究有待继续,感觉还没有研究透更新机制,我现在有点脑子晕,有的时候感觉框架细节还有问题,不知道是我的问题,还是框架问题。


六.注意!切记!

工程设置里面的stripping level 剥离等级,就默认关闭,选择其他会下载的时候写入不到手机里,这个问题改了整整2天,不知道哪里出问题,就是下载不下来,后来发现就是这个选项的问题!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
手机存储别乱删! 教你正确清理手机垃圾
手机越用越慢?内存越来越少?教小白轻松解决问题!
严重提醒!XP里面这些东西可以删除
细说Unity3D(一)动态读取外部文件
关于Unity中文件读取
unity 加载资源
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服