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文件