|
xlua热补丁打包流程
1. 将需要交互的脚本打标签并生成Code:
- - 将需要进行热补丁的代码脚本类名上加上 [Hotfix] 标签
- - 将需要C#调用lua的方法或类名加上 [CSharpCallLua] 标签
- - 将需要lua调用C#的方法或类名加上 [LuaCallCSharp] 标签
- - 执行菜单栏 XLua - Generate Code
- - 需要手动执行菜单栏 XLua-Hotfix Inject in Editor
复制代码 2. 添加 HOTFIX_ENABLE 宏定义
- - 在 ProjectSetting - Player - Other Setting - Scripting Define Symbols 中添加 HOTFIX_ENABLE
复制代码 3. 打AB包
- - 将需要打AB包的文件加上AssetBundle,选中文件,在Inspector窗口下方设置Assetbundle和名称
- - 执行菜单栏ToolsAB-Generate生成对应平台的包
- - 会自动打开生成包的文件夹,将包上传至服务器
- - 每次生成包,这里为了方便编辑器操作直接执行了(Hotfix Inject in Editor),也可手动执行菜单栏 XLua-Hotfix Inject in Editor
复制代码 4. lua热补丁代码
- {例:
- xlua.hotfix(CS.HotfixTest,"HotfixTest",function( self )print("更新为热补丁代码")end)}
复制代码 5. require 引用其他lua包要和主包打在同一个ab文件下
- {例:使用util.hotfix_ex,不替换全部代码,在function内 self:方法名 执行之前的代码 再执行补丁代码
- local util =require("util")
- util.hotfix_ex(CS.HotfixTest,"HotfixExTest",function( self )
- self:Start()print("更新为热补丁代码2")end)}
复制代码 6. lua代码注意事项:
- - xlua.private_accessible(CS.类)获得该类私有字段或方法访问权限
- - CS.UnityEngine.GameObject.Find("") 这个Find要用.
- - GetComponent("组建名") 这个要用:
- - 静态方法用 类名.方法名
- - 静态属性用 类名.属性名
- - 非静态方法调用 该类的对象:方法名
- - 非静态属性用 该类的对象.属性名
复制代码 7. 常见报错:
- - c# exception in LoadFromCustomLoaders [C]: in function 'require' 这个报错是没有将引用包和主包放在一起导致require找不到包
- - LuaException: xlua.access, no field __Hotfix0_Start 这个是没有执行,菜单栏 XLua-Hotfix Inject in Editor操作
- - You can't inject before the compilation is done 正在编译,编译之后才可进行注入
- - Error:can not find delegate for BoardLogin.Start! try re-genertate code. 没有进行生成Code需要先执行,菜单栏 XLua - Generate Code再进行注入
- please install the Tools 需要将Tool文件夹复制到工程下面
复制代码 |
|