xlua - lua协程与Unity协程

lua脚本:Assets/Lua/Test3.lua.txt

复制代码
local move_end = {}

local LuaEnumeratorImpl = {}
LuaEnumeratorImpl.__index = LuaEnumeratorImpl

function LuaEnumeratorImpl.new(coRun)
    local obj = {}
    setmetatable(obj, LuaEnumeratorImpl)
    obj:ctor(coRun)
    return obj
end

function LuaEnumeratorImpl:ctor(coRun)
    self.Current = nil
    self.m_CoFunc = function()
        coRun()
        return move_end
    end
    self.m_Co = nil
end

function LuaEnumeratorImpl:MoveNext()
    local flag, result = coroutine.resume(self.m_Co) --返回值result为yield的参数, 即: WaitForSeconds
    self.Current = result
    if self.Current == move_end then
        self.Current = nil
        return false
    end
    return true
end

function LuaEnumeratorImpl:Reset()
    self.m_Co = coroutine.create(self.m_CoFunc)
end




local enu = nil --该lua table会映射为c#的IEnumerator接口实现对象, StartCoroutine的参数也是IEnumerator类型 enu = LuaEnumeratorImpl.new(function() print("stop coroutine after 5 seconds") coroutine.yield(CS.UnityEngine.WaitForSeconds(5)) Test3MonoInst:StopCoroutine(enu) print("coroutine stoped") end) enu:Reset() Test3MonoInst:StartCoroutine(enu)
复制代码

 

Test3.cs

复制代码
public class Test3 : MonoBehaviour
{
    private LuaEnv m_LuaEnv;

    void Start()
    {
        m_LuaEnv = new LuaEnv();
        m_LuaEnv.AddLoader((ref string filePath) =>
        {
            filePath = filePath.Replace('.', '/');
            filePath = $"Assets/{filePath}.lua.txt";
            var txtAsset = AssetDatabase.LoadAssetAtPath<TextAsset>(filePath);
            return Encoding.UTF8.GetBytes(txtAsset.text);
        });

        m_LuaEnv.Global.Set("Test3MonoInst", this);
        m_LuaEnv.DoString("require('Lua.Test3')");
    }

    void OnDestroy()
    {
        if (null != m_LuaEnv)
        {
            m_LuaEnv.Dispose();
        }
    }

}
复制代码

 

posted @   yanghui01  阅读(114)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2023-02-28 Shader入门精要笔记 - CH10.1_环境映射之折射
点击右上角即可分享
微信分享提示