UH2S2L23——协程函数替换

协程函数替换

前置知识:Lua调用协程

假设我们要对下面协程方法做热补丁

1
2
3
4
5
6
7
8
9
10
11
public class HotfixMain : MonoBehaviour
{
IEnumerator TestCoroutine()
{
while (true)
{
yield return new WaitForSeconds(1);
Debug.Log("C#协程打印一次");
}
}
}

协程函数的替换比较特别,需要在热补丁替换的基础上,执行Lua调用协程的前置步骤,归纳固定写法为

1
2
3
4
5
6
7
8
9
10
11
12
-- 导入必要工具表
util = require("xlua.util")
-- 为类打热补丁
xlua.hotfix(CS.类名, {
-- 替换协程逻辑
协程名 = function(self)
-- 需要函数直接返回由util.cs_generator转化的内容
return util.cs_generator(function()
-- 真正的协程函数逻辑在这里编写
end)
end
})

按照上面的固定写法,lua中替换协程逻辑为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 导入必要工具表
util = require("xlua.util")

xlua.hotfix(CS.HotfixMain, {
TestCoroutine = function(self)
--返回一个正儿八经的 xlua处理过的lua协程函数
return util.cs_generator(function()
while true do
coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
print("Lua打补丁后的协程函数")
end
end)
end
})