木骰

xLua:配置[Hotfix] 热补丁

相关的文档在XLua/Doc/hotfix.md

真是好长的文档啊。程序员也真不容易。

开启热补丁

XLua对于热补丁的特性默认是关闭的。要开启这个特性需要添加HOTFIX_ENABLE的宏,在build setting下找到Scripting Define Symbols

然后想要在编辑器下能够跑起来热补丁的话还需要执行一下xLua菜单下的注入操作。
这一步仅仅在编辑器下才需要,打包到手机上就不用执行这一步了。值需要把宏开起来就好了。
然后再来运行Examples下Hotfix的示例就能正常跑起来了。

注意:从xLua工程拷贝lua到自己工程的时候记得要把xLua Assets同级层的Tools目录也拷过来

 

配置热补丁

跟LuaCallCSharp的配置方式一样。
直接打上[Hotfix]标签
或者也可以像配置那个WrapConfig一样,配置在静态类里。那么就一起写到之前那个WrapConfig.cs里好了。


public static class WrapConfig  {
    [LuaCallCSharp]
    public static List List_LuaCallCS = new List()
    {
        typeof(WrapTest),
        typeof(Dictionary<string,int>),
    };
    [Hotfix]
    public static List List_Hotfix = new List()
    {
        typeof(WrapTest),
    };
    [Hotfix]
    public static ListList_Hotfix_nameSpace
    {
        get
        {
            return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
                    where type.Namespace=="NeedHotfix" select type).ToList();
        }
    }
}

对于Hotfix的配置除了直接配置一个List字段包含指定的类型外,
还可以配置一个List的属性,然后在get属性里写一段查找逻辑,比如按照命名空间查找,像上面这样,就能把这个“NeedHotfix”命名空间下的所有类型全都标记为支持热补丁了。
然后再写一个Unity的脚本模版,这样,每次新建的类就都自动包含在这个命名空间下了。省得一个个去配置。

需要注意的是这个Hotfix有几个约束条件:
## 约束
不支持静态构造函数。
不支持在子类override函数通过base调用父类实现。
目前只支持Assets下代码的热补丁,不支持引擎,c#系统库的热补丁。即:只能对自建的代码进行热补丁。
并且这个热补丁技术也是依赖代码生成的,需要执行xLua/GenerateCode。也就是之前的Wrap文件

— 于 共写了1106个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*