|
更新日期:2020年3月20日。
Github源码:[点我获取源码]
Gitee源码:[点我获取源码]
索引
XLua热更新简介使用XLua热更新
创建XLua开发环境运行XLua逻辑Lua入口解析编写自己的Lua脚本加载自定义Lua代码在Lua中访问框架代码C#中获取Lua全局变量C#中设置Lua全局变量
运行时检视面板
XLua热更新简介
XLua是一个针对C#(Unity, . net, Mono)的Lua编程解决方案,它支持android, ios, windows, linux, osx等。
本模块旨在结合XLua与框架的资源加载策略,快速实现热更流程,并优化了开发环境,使得开发人员可以最低成本的投入到Lua业务开发。
使用XLua热更新
创建XLua开发环境
1.对于新项目,只要在工程中包含了HTFrameworkXLua模块,则自动启用了XLua,勾选面板的Auto StartUp开关,则在初始化时便自动启动热更新逻辑,否则,需要手动在代码中调用启动方法。
2.与框架源生的Hotfix相同,点击下面的Create XHotfix Environment按钮便可一键创建XLua环境,创建完成后,面板会显示XLua环境已成功创建的提示。
3.XLua的环境目录非常简单:
A、Lua代码的根目录,新建的Lua脚本都必须放在此目录下(如要修改,先删除此目录,再修改面板的XHotfixCode AssetsPath属性,然后重新创建环境)。
①、 Main.lua为自动生成的Lua代码入口,由B面板的XHotfixCodeMain属性指定。
B、XLua控制器的属性面板:
①、LoaderType:自定义XLua加载器的类型。
②、Auto StartUp:是否自动启动Lua逻辑。
③、Tick Interval:XLua一次Tick的间隔时间(秒)。
④、XHotfixCode AssetBundleName:Lua代码将会被打入的AB包名称(所有Lua代码单独打入一个AB包)。
⑤、XHotfixCode AssetsPath:Lua代码所在的文件夹。
⑥、XHotfixCode Main:Lua代码的入口。
运行XLua逻辑
我们创建热更环境完成后,在主场景中加入框架主预制体及XLua管理器预制体,直接运行场景,便可以看到 Hello world 了(虽然这里输出的并不是这几个字母):
Lua入口解析
如上的 Hello world 很明显是由Main.lua输出的,我们直接打开Main.lua脚本:- --require 'your lua script name'
- Main =CS.HT.Framework.Main
- GameObject =CS.UnityEngine.GameObject
- Transform =CS.UnityEngine.Transform
- function OnInitialization()print("Lua OnInitialization...")
- end
- function OnPreparatory()print("Lua OnPreparatory...")
- end
- function OnRefresh()print("Lua OnRefresh...")
- end
- function OnRefreshSecond()print("Lua OnRefreshSecond...")
- end
- function OnTermination()print("Lua OnTermination...")
- end
复制代码 与一些常规的C#脚本生命周期类似,Main.lua代表整个Lua代码的生命周期:
OnInitialization:Lua初始化,一些初始化操作可以放在这里。
OnPreparatory:Lua准备完毕(第二轮初始化),为什么会有第二轮初始化?类似Monobehaver的Awake和Start,Awake是自身初始化,Start才是需要访问其他对象的进一步初始化,以保证在Start访问到其他对象时,对方已经通过Awake完成自身初始化。
OnRefresh:Lua逻辑帧轮询,类似Monobehaver的Update。
OnRefreshSecond:Lua逻辑秒轮询,以主程序的帧刷新频率而定的秒为单位的轮询,每秒呼叫一次,一些调用不频繁但又需要实时刷新的逻辑可以放在这里,比如实时刷新当前时间。
OnTermination:Lua逻辑终止。
编写自己的Lua脚本
首先,通过快捷创建方式新建一个Lua脚本:
Project界面右键 -> Create -> HTFramework XLua -> [XHotfix] Lua Script
如下,新建一个名为 MyLua 的Lua脚本(实际上就是新建了一个MyLua模块):
注意:为了能正确加载Lua代码,模块的名称与Lua脚本名称必须保持一致。
注意:XHotfix路径下的子路径里的Lua脚本也会被自动加载,不过必须保证所有Lua脚本的名称不重复。
注意:项目发布时,必须将所有Lua脚本标记为AB包名称xhotfix(在属性面板修改)。
- MyLua ={}
- function MyLua.OnInitialization()print("Lua MyLua.OnInitialization...")
- end
- function MyLua.OnPreparatory()print("Lua MyLua.OnPreparatory...")
- end
- function MyLua.OnRefresh()print("Lua MyLua.OnRefresh...")
- end
- function MyLua.OnRefreshSecond()print("Lua MyLua.OnRefreshSecond...")
- end
- function MyLua.OnTermination()print("Lua MyLua.OnTermination...")
- end
- return MyLua
复制代码 加载自定义Lua代码
我们在Main中按如下方式加载MyLua模块:- --加载 MyLua 模块
- require 'MyLua'
- Main =CS.HT.Framework.Main
- GameObject =CS.UnityEngine.GameObject
- Transform =CS.UnityEngine.Transform
- function OnInitialization()print("Lua OnInitialization...")--调用 MyLua 的全局方法
- MyLua.OnInitialization()
- end
- function OnPreparatory()print("Lua OnPreparatory...")
- end
- function OnRefresh()print("Lua OnRefresh...")
- end
- function OnRefreshSecond()print("Lua OnRefreshSecond...")
- end
- function OnTermination()print("Lua OnTermination...")
- end
复制代码 运行,查看控制台输出:
按照此种方式,便可以扩展你的Lua业务代码。
在Lua中访问框架代码
我们如下修改Main.lua:- Main =CS.HT.Framework.Main
- GameObject =CS.UnityEngine.GameObject
- Transform =CS.UnityEngine.Transform
- function OnInitialization()print("Lua OnInitialization...")
- end
- function OnPreparatory()print("Lua OnPreparatory...")
- end
- function OnRefresh()print("Lua OnRefresh...")--按下鼠标右键时,切换至下一个流程
- if(Main.m_Input:GetButtonDown('MouseRight'))
- then
- Main.m_Procedure:SwitchNextProcedure()
- end
- end
- function OnRefreshSecond()print("Lua OnRefreshSecond...")
- end
- function OnTermination()print("Lua OnTermination...")
- end
复制代码 然后创建两个流程:
在第二个流程中添加日志打印代码:- publicclassNewProcedure2:ProcedureBase{/// <summary>/// 流程初始化/// </summary>publicoverridevoidOnInit(){}/// <summary>/// 进入流程/// </summary>/// <param name="lastProcedure">上一个离开的流程</param>publicoverridevoidOnEnter(ProcedureBase lastProcedure){
- GlobalTools.LogInfo("切换至流程2");}/// <summary>/// 离开流程/// </summary>/// <param name="nextProcedure">下一个进入的流程</param>publicoverridevoidOnLeave(ProcedureBase nextProcedure){}/// <summary>/// 流程帧刷新/// </summary>publicoverridevoidOnUpdate(){}/// <summary>/// 流程帧刷新(秒)/// </summary>publicoverridevoidOnUpdateSecond(){}}
复制代码 运行,查看控制台输出:
C#中获取Lua全局变量
通过如下方式在C#中获取Lua全局变量:- //获取名称为 Level 的 int 全局变量
- XHotfixManager.Current.Get<int>("Level");
复制代码 C#中设置Lua全局变量
通过如下方式在C#中设置Lua全局变量:- //设置一个名称为 Level 的 int 全局变量,该变量值为50
- XHotfixManager.Current.Set("Level",50);
复制代码 其他关于XLua的详细使用教程请参阅:XLue教程
运行时检视面板
在编辑器中运行时将会出现运行时检视面板(Runtime Data),主要用以调试或数据监测,目前面板如下:
1.Loaded Lua Codes:显示当前已经加载的Lua脚本,只有已经加载的脚本,才能通过require加载并运行。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|