26.热补丁替换协程函数

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

×

喜欢就点赞,疼爱就打赏