游戏热更新(XLua)专题一(知识点)

课程学习笔记: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脚本中。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值