XLua框架搭建——Unity的Update循环

本文介绍了如何在Unity中使用XLua框架来模拟Monobehaviour的Update生命周期。通过创建C#类并继承Monobehaviour,标记DontDestroyOnLoad,然后在Lua中注册回调函数,实现对Update、FixedUpdate和LateUpdate的调用。在Lua类的构造函数中,调用C#的AddUpdateListener等方法进行注册,确保非Monobehaviour类也能参与Unity的游戏循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

unity的生命周期中有一个Update函数,是游戏的循环,类似的还有FixedUpdate和LateUpdate等,在c#中继承monobehaviour后unity就会调用对应的函数,根据我们前面的设计《XLua框架搭建——LuaBehaviour设计》,我们也可以获取对应的update函数,然后进行调用,但是在lua中是mgr类的非生命周期下的类呢?

无论是c#还是lua都会有这个问题,对于非monobehaviour的类,是没有对应的生命周期函数调用的,想想在c#中的做法,一般是定义一个c#类,继承monobehaviour,然后标记为DontDestroyOnLoad,在类里面添加一些类似于addUpdateListener的方法进行注册,将这些注册放到列表里,在对应的函数里遍历调用对应的注册函数。

在lua中沿用这种方法,我们将刚才写的类加入到导出列表,在lua中新建一个类,在类构造函数中向刚才的c#类注册对应的update回调函数,利用同样的原理,添加AddUpdateListener,AddFixedUpdateListener,AddLateUpdateListener,以及对应的Remove函数,和前面的消息分发一样,在add时需要将self实例一起传过来,然后在刚才注册的回调里遍历列表,进行调用。

代码比较简单,仅供参考

GameUpdate = newClass("GameUpdate", nil)

local m_updateList = {};
local m_fixedUpdateList = {};
local m_lateUpdateList = {};

function GameUpdate.AddUpdate(ins, func)
    local add = {};
    add.ins = ins;
    add.func = func;
    table.insert(m_updateList, add);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值