建设一个网站需要多少钱,东莞星凯网络,广州商务网站建设电话,做网站的收费标准前言 用c#开发的时候#xff0c;新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数#xff0c;如Awake,Start, Update, OnDestroy等。 在相应的方法中实现游戏逻辑#xff0c;引擎会适时调用。 而Lua在这里做为c#的一个外延语言#xff0c;自然是不受…前言 用c#开发的时候新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数如Awake,Start, Update, OnDestroy等。 在相应的方法中实现游戏逻辑引擎会适时调用。 而Lua在这里做为c#的一个外延语言自然是不受Unity管理的。 不过在前几篇文章中能看到在XxxPanel和XxxCtrl中确实又有生命周期的影子比如在MessagePanel.lua脚本中就存在MessagePanel.Awake和MessagePanel.OnDestroy方法。 通过日志打印能知道这些方法确实在相应的时候被执行了。 那他是怎么实现的呢 这里就又要说到LuaBheavour脚本了。 LuaBehaviour实现的lua脚本生命周期 1、LuaBehaviour是一个c#脚本 LuaBehaviour是一个c#脚本在XxxPanel预制体被实例化的时候被添加到了这个对象上点击每一个实例化生成的窗口都能看到这个脚本的存在。比如我们之前实现的LoginPanel见下图 2、LuaBehaviour脚本的内容 打开这个脚本能直接看到Awake方法和Star方法数从方法名称就能猜到这个应该是Monobehaviour的生命周期函数虽然这个脚本是继承的View。 打开View的定义发现View继承Base 继续打开Base能直到Base确实继承自MonoBehaviour 显而易见的LuaBehaviour中的Awake和Start是会被引擎调用的。而在Awake和Start中的调用语句 Util.CallMethod(name, Awake, gameObject); Util.CallMethod(name, Start); 应该就是对Lua脚本XxxPanel中相应函数的调用。 打开Util.CallMethod方法能看到确实如此。 /// summary/// 执行Lua方法/// /summarypublic static object[] CallMethod(string module, string func, params object[] args) {LuaManager luaMgr AppFacade.Instance.GetManagerLuaManager(ManagerName.Lua);if (luaMgr null) return null;return luaMgr.CallFunction(module . func, args);} 3、LuaBehaviour是被谁绑定的 LuaFramework实现了很多的管理类用于C#和Lua的对接工作比如GameManager、LuaManager、NetworkManager等以及PanelManager。 在PanelManager里我找到了用于实例化窗口的方法CreatePanel也看到了绑定LuaBehaviour的语句。迷题解开。 总结 1、PanelManager实例化窗口的时候给窗口对象绑定LuaBehaviour脚本 2、LuaBehaviour脚本中的生命周期函数执行从而驱动对应的Lua脚本中的生命周期函数执行。 遗留问题 在XxxPanel中的和XxxCtrl中都存在Awake那LuaBehaviour中的Awake到底调用的是哪一个脚本上的方法呢 这个应该需要研究一下LuaManager。 感悟 持续更新博客的计划总是失败想了想也许是前几篇文章都写得太长了吧。 之前每写一篇都要准备好久写完总是到半夜疲惫得不行。导致后来一想到写博就有畏难情绪就不想写了。 从这篇开始每篇少写一点。希望每周都有输出不求多但求坚持。 转载于:https://www.cnblogs.com/imteach/p/11161214.html