最近在学习xlua,引申到的内容是热更新和服务器对版本的控制和对更新包的管理。 hotfix 因为时间仓促,好像忘了回传目标版本号,后续再补 xlua是腾讯推出的一款用于热更新的框架。好处在于可以和c#搭配,完成游戏的开发。 根据上述流程,开发者能通过xlua来实现对用户app的热更新。 其次我们要提到xlua的两个编辑器功能,分别是:generate code和hot fix inject in editor。 前者实现的效果是,对xlua代码的实现。这个实现指的是对xlua框架代码的实现。 而第二个则是对应开发者的c#代码。当开发者改动过自己的c#代码后,就需要重新运行一次该功能。否则将会报出不能找到代码功能之类的错误。 最后,我们稍微提一下,xlua和c#相互调用的方式。 xlua调用c#,需要给c#的类前打上[hotfix]的标签,并为可能被xlua调用的方法加上[LuaCallCSharp]的标签。这两个标签将帮助lua,通过上述方法二产生的脚本,找到指定的c#代码 c#调用xlua,c#也能调用lua的方法,但个人觉得没什么必要。这里要提到的c#调用xlua,是指版本更迭了之后,程序有了热更新的xlua需要执行,那么需要调用xlua来覆盖掉对应的代码。此处需要一个luaEnv对象(该对象最好只有一个,否则很影响程序效率),通过该对象,可通过Addloader的方式添加加载器方法,通过这个方法和dostring传入的值获取所需的.lua.txt文件,并提取其字符串来覆盖c#代码。 在上述给出的github中,我实现了版本控制器的效果,当然,这个效果可能没有在服务器外,外置资源下载器来的好。没办法,这里我只有一个服务器,并且没有架设一个专门用于管理版本的http服务器的打算。 该版本控制器的流程如下 这里将版本文件进行缓存的初衷是为了防止多人需求更新重复的文件,造成读写流循环的开启关闭。但也需要分别为它们设置时间值,否则并不常用的更新包被长时间缓存会浪费系统资源。 此处我直接使用服务器进行版本的下载管理,需要用到socket,此处涉及如下几个坑点。 第一个坑点是,byte数组的管理。因为byte[]并没有动态数组,有时候所需读取的文件过大,byte数组的大小就会不确定,过大是浪费,太小会造成溢出。这里我使用的是ArrayList进行动态存储。再通过for循环把它读到byte数组中。浪费了点效率,但基本可行。 第二个坑点是,socket实现下载,不可对读入的文件数据进行处理,包括转String,转码等都会造成Assetboundle文件的不完整。这将使下载下来的内容无法被解包。 综上,大致就是本次学习过程所涉及到的内容和经历的困难点所在。后续还将为服务端添加数据库验证,给游戏端实装热更和登录注册,实现传输加密和最后的游戏性涉及。路漫漫其修远兮。
Github
制作版本控制器的服务端,使用的还是上一篇所写的在线服务端。
本次更新的内容是,在进行身份验证后,进行一次版本验证,如果版本验证要低于当前服务器设置的版本,则进行版本更迭。
xlua
用惯了c#的我,其实对xlua的开发其实是不太感冒的,即使用上了vs code,装了luaide,它的代码提示什么的还是不太友好。索性xlua能和c#协作开发,但天知道若干个版本之后,其实c#的底层代码肯定被xlua代码覆盖了大半,届时这款游戏还是以xlua为主,毕竟没几个人会无聊到再去重新下载一遍冷更新的app。
首先提一下xlua涉及到的功能。它所做的就是覆盖unity的c#代码来实现热更新的效果。
其流程类似如下
在unity2019中,我曾经遇到过打包报光照错误的问题。需要去将几个光照的功能拉黑,并重新generate code一次。因此我推断,第一个功能是对应的框架代码。
服务器的版本控制器
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算