XLua-热更新(HotFix)

2019-06-13 16:29:08 浏览数 (1)

仿照XLua的官方例子,我们做一个XLua的热更新 1.按照hotfix.md的使用说明

1、添加HOTFIX_ENABLE宏打开该特性(在Unity3D的File->Build Setting->Scripting Define Symbols下添加)。编辑器、各手机平台这个宏要分别设置!如果是自动化打包,要注意在代码里头用API设置的宏是不生效的,需要在编辑器设置。 (建议平时开发业务代码不打开HOTFIX_ENABLE,只在build手机版本或者要在编译器下开发补丁时打开HOTFIX_ENABLE) 2、执行XLua/Generate Code菜单。 3、注入,构建手机包这个步骤会在构建时自动进行,编辑器下开发补丁需要手动执行"XLua/Hotfix Inject In Editor"菜单。注入成功会打印“hotfix inject finish!”或者“had injected!”。

2.内嵌模式

默认通过小工具执行代码注入,也可以采用内嵌到编辑器的方式,定义INJECT_WITHOUT_TOOL宏即可。

3.代码实例 在C#代码中我们要将热更新的类添加特性[Hotfix] 这里我们要更改一个Update方法通过XLua的Hotfix

代码语言:javascript复制
[Hotfix]
public class CSHotFix : MonoBehaviour {    
    void Start () {
        LuaManager.Instance.luaEnv.DoString("require 'MyHotFix'", "MyHotFix.lua.txt");
    }   
    void Update () {
        if (Input.GetMouseButtonDown(1))
        {
            print("right mouse put");
        }
    }
}

在Lua代码中,使用xlua.hotfix方法传入要修改的类,被修改的方法,新的方法。这样在程序运行的时候,就会执行Lua的代码了

代码语言:javascript复制
xlua.hotfix(CS.CSHotFix,"Update",function ()
    if CS.UnityEngine.Input.GetMouseButtonDown(1) then
        local obj = CS.UnityEngine.GameObject.CreatePrimitive(CS.UnityEngine.PrimitiveType.Sphere)
        obj.name = "made in Lua";
    end
end)

4.一个类的私有属性可以访问要在Lua中添加

代码语言:javascript复制
xlua.private_accessible(CS.CSHotFix);

0 人点赞