UH2S2L21——第一个热补丁

本章代码关键字

1
xlua.hotfix()    --该方法可以用于对类的一个或多个方法进行热补丁替换操作,它使得调用方法时不再执行C#脚本内逻辑,而是Lua脚本逻辑

xLua热补丁原理

假设我们的游戏项目游戏逻辑目前全是用C#编写的,此时我们想要使用Lua来做热更新基本是要推翻重写的
而xLua提供了一种热补丁功能,可通过打补丁的形式,使得我们代码逻辑不再走C#脚本的逻辑,而是Lua代码的逻辑
这时我们再对Lua脚本执行热更新即可达到代码热更新的目的

xLua热补丁

假设我们要对下面类的Add​方法和Speak​方法做热补丁

1
2
3
4
5
6
7
8
9
10
11
12
public class HotfixMain : MonoBehaviour
{
public int Add(int a, int b)
{
return 0;
}

public static void Speak(string s)
{
Debug.Log("C# Speak");
}
}

lua当中,热补丁代码固定写法:xlua.hotfix(类, "函数名", lua函数)
需要注意的是对成员方法打热补丁,lua函数的第一个参数必须为self​,self​用于方法内调用对象自身内容,后面在接参数列表参数
静态方法就不需要self​参数

1
2
3
4
5
6
7
8
9
--成员函数 第一个参数 self
xlua.hotfix(CS.HotfixMain, "Add", function(self, a, b)
return a + b
end

--静态函数 不用传第一个参数
xlua.hotfix(CS.HotfixMain, "Speak", function(a)
print(a)
end

要注意!

  • 仅仅以上操作并没有完成打热补丁的操作!此时直接执行是会报错的,我们必须继续做如下的操作!
  • 如果修改了C#脚本中修改了打热补丁的类的代码,我们就需要重新执行第四步操作!
  • 如果在C#脚本中打热补丁的类添加了方法,或者添加了新的需要打热补丁的类,则必须重新执行第三步和第四步操作!
  1. 加特性,为需要打热补丁的类,添加[Hotfix]​​特性

    1
    2
    3
    4
    5
    [Hotfix]
    public class HotfixMain : MonoBehaviour
    {
    //...
    }
  2. 加宏,第一次开发热补丁需要加

    image

    之后XLua选项内会多出一个注入热修复到编辑器(Hotfix Inject In Editor) 选项

  3. 生成代码 (XLua - Generate Code),每次为需要热补丁替换的类添加了特性或者为热补丁替换的类添加了方法都必须要重新执行这一步

  4. hotfix 注入(Hotfix Inject In Editor),每次修改了热补丁替换的类的代码就必须要重新执行这一步,注入时可能报错,提示你要引入Tools

    如果提示需要引入Tools,你需要打开你下载的xlua-master文件夹,复制其中的Tool文件夹,导入到工程文件夹内(不是Assets文件夹下!)

    image

以上步骤完成,应该会输出如下信息:

image