课程学习笔记:https://ke.qq.com/course/337826
ps:建议搭配课程学习,吃透知识点,解决疑惑:什么是xlua,热更新和xlua什么关系,xlua和lua又是什么关系?等等
个人总结:第一点,游戏需要更新。第二点,游戏的更新分为热更新和冷更新,热更新体验感更好。第三点,实现热更新的方式有很多,XLua只是其中的一种。
一、游戏热更新介绍
1、游戏的更新:
①游戏版本更新
②资源更新: ab包(4.6-5.0版本,5.0-5.6版本,5.6以上版本(资源,ab设置)),配表,场景,音乐
③代码更新: 需要编译(C#,java),不需要编译(JS,lua)
2、游戏更新的分类:
①热更新:资源素材,流程:启动->热更新->加载->玩
②冷更新:新的APK、ios版本,流程:下载->安装->启动->加载->玩
二、游戏更新的技术点
1、为什么要热更新:
①适应上线的需求:手游收到苹果审核的约束,一次审核提交10~20天
②热调试,热开发:热发布,unity的编译机制
③服务器:不能停服
2、怎么进行手游代码热更新?
①android:将执行代码预编译为assembly dll;ab;反射机制
②ios:禁止iOS下的程序热更新;JIT(实时编译,即时编译)在iOS下无效,ab
三、lua语言介绍
ps:lua官网(www.lua.org),下载学习教程:http://www.runoob.com/lua/lua-tutorial.html
①lua语言:轻便、无需编译、可扩展
②lua插件(http://www.ulua.org/index.html):uLua,uLua&cstoLua,sLua,C#Light,uniLua,toLua
③lua插件的特性:需要有一个可以执行lua脚本代码的环境;C# call lua;lua call C#
四、lua语言基础
PS:C#与Lua语言学习对比https://blog.csdn.net/QAWQQWAQ/article/details/85841228
Lua 八种数据类型以及基本语法:https://blog.csdn.net/liaoshengg/article/details/81299018
Lua 学习元表,元方法:https://blog.csdn.net/liaoshengg/article/details/81356333
Lua 中用table表来实现类,继承,以及面向对象:https://blog.csdn.net/liaoshengg/article/details/81381423
Lua 协同程序coroutine:https://blog.csdn.net/liaoshengg/article/details/81333521
1、大致了解一下语言的特点
2、安装编写环境
3、helloworld
4、变量的定义
5、数据类型(《简单数据类型:整数型、布尔型、小数性... 》《复杂数据类型·:table》)
6、运算符(算术运算符、逻辑运算符、关系运算符、三目运算符(?:))
7、分支结构(顺序结构、判断结构、循环结构、类)
8、面向对象(继承、封装、多态)
五、xlua demo解析
1、git地址:https://github.com/Tencent/xlua
2、导入插件
3、environment
4、LuaCallCSharp
①new 一个c#对象
②访问c#静态属性、方法
③访问c#成员属性、方法
④访问父类属性、方法
⑤参数的输入输出属性(out,ref)
⑥重载方法
⑦参数带默认值的方法,与可变参数方法
⑧枚举类型
⑨delegate的使用(调用+-)
⑩event的使用
⑾c#的复杂类型和table的自动转换
六、xlua实战(UI)
1、使用LuaBehaviour,对lua脚本进行读取
2、**.lua.txt需要获得的unity组件(通过Injections的方式)
3、在**.lua.txt中对控件进行访问,以及功能逻辑的编写
4、把lua脚本放到服务器上供客户端下载
七、xlua实战(FlxBug)
CIL(属于通用的语言架构)-----类似于JVM(工作原理上)
1、把c#类名字打一个宏标签 [hotfix]
补充:这个特性默认是关闭的,实用时需要在UNITY中添加HOTFIX_ENABLE宏,打开步骤(在Unity3D的File->Build Setting->Scripting Define Symbols下添加)
这个热补丁还依赖Cecil,添加HOTFIX_ENABLE宏之后,可能会报找不到Cecil。这时你需要到Unity安装目录下找到Mono.Cecil.dll,拷贝到项目里头。而HOTFIX_DEBUG_SYMBOLS则依赖Mono.Cecil.Pdb.dll,Mono.Cecil.Mdb.dll。
热补丁需要执行XLua/Generate Code才能正常运行。
2、调用我们lua.HotFix方法,进行一个c#脚本文件字段,或者方法的替换
3、完成热更新
ps:六和七有什么区别? 六是吧lua脚本放在服务器上,游戏打开以后,会下载lua脚本,逻辑写在lua脚本里;
而七则是直接修改c#脚本,Unity 游戏用XLua的HotFix实现热更原理揭秘 :https://www.sohu.com/a/148756513_468635
游戏用XLua的HotFix实现热更新原理:
第一步:通过对C#的类与函数设置Hotfix标签。来标识需要支持热更的类和函数。第二步:生成函数连接器来连接LUA脚本与C#函数。第三步:在C#脚本编译结束后,使用Mono提供的一套C#的API函数,对已经编译过的.Net体系生成的DLL文件进行修改。第四步,通过LUA脚本修改C#带有标签的类中静态变量,把代码的执行路径修改到LUA脚本中。