26.xLua热补丁-协程函数替换
26.1 知识点
准备工作
准备有协程函数的测试类
public class Lesson26_Test : MonoBehaviour
{
public IEnumerator TestCoroutine()
{
while (true)
{
yield return new WaitForSeconds(1f);
Debug.Log("C#协程 每秒打印一次");
}
}
}
调用Lua脚本后调用协程函数
LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Lesson26_xLua热补丁_协程函数替换");
Lesson26_Test test = this.gameObject.AddComponent<Lesson26_Test>();
StartCoroutine(test.TestCoroutine());
协程函数替换
lua使用C#协程函数 必须先执行xlua.util
util = require("xlua.util")
使用多函数替换语法替换协程函数 xlua.hotfix(类, {函数名 = 函数, 函数名 = 函数....})
xlua.hotfix(CS.Lesson26_Test, {
TestCoroutine = function(self)
return util.cs_generator(function()
while true do
coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
print("Lua协程 每秒打印一次")
end
end)
end
})
26.2 知识点代码
Lesson26_xLua热补丁_协程函数替换.lua
print('我是Lua脚本 Lesson26_xLua热补丁_协程函数替换')
print("*********知识点一 协程函数替换***********")
--lua使用C#协程函数 必须先执行xlua.util
util = require("xlua.util")
--使用多函数替换语法替换协程函数 xlua.hotfix(类, {函数名 = 函数, 函数名 = 函数....})
xlua.hotfix(CS.Lesson26_Test, {
--返回xlua处理过的lua协程函数 成员函数要传入self
TestCoroutine = function(self)
--
return util.cs_generator(function()
while true do
coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
print("Lua协程 每秒打印一次")
end
end)
end
})
Lesson26_xLua热补丁_协程函数替换
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
public class Lesson26_xLua热补丁_协程函数替换 : MonoBehaviour
{
void Start()
{
LuaManager.Instance.Init();
LuaManager.Instance.DoLuaFile("Lesson26_xLua热补丁_协程函数替换");
Lesson26_Test test = this.gameObject.AddComponent<Lesson26_Test>();
StartCoroutine(test.TestCoroutine());
}
}
[Hotfix]
public class Lesson26_Test : MonoBehaviour
{
public IEnumerator TestCoroutine()
{
while (true)
{
yield return new WaitForSeconds(1f);
Debug.Log("C#协程 每秒打印一次");
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com