Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的
前言
用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方法
/// </summary>
public static object[] CallMethod(string module, string func, params object[] args) {
LuaManager luaMgr = AppFacade.Instance.GetManager<LuaManager>(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。
感悟
持续更新博客的计划总是失败,想了想,也许是前几篇文章都写得太长了吧。
之前每写一篇,都要准备好久,写完总是到半夜,疲惫得不行。导致后来一想到写博,就有畏难情绪,就不想写了。
从这篇开始,每篇少写一点。希望每周都有输出,不求多,但求坚持。
Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的的更多相关文章
- Unity3D热更新之LuaFramework篇[05]--Lua脚本调用c#以及如何在Lua中使用Dotween
在上一篇文章 Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法 中,我对LuaBehaviour脚本进行了扩展,添加了两个新的UI监听方法,也提到最好能单写一个脚本处理此 ...
- Unity3D热更新之LuaFramework篇[07]--怎么让unity对象绑定Lua脚本
前言 在上一篇文章 Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的 中,我分析了由LuaBehaviour来实现lua脚本生命周期的方法. 但在实际使用中 ...
- Unity3D热更新之LuaFramework篇[10]--总结篇
背景 19年年初的时候,进到一家新单位,公司正准备将现有的游戏做成支持热更的版本.于是寻找热更方案的任务就落在了我头上. 经过搜索了解,能做Unity热更的方案是有好几种,但是要么不够成熟,要么不支持 ...
- Unity3D热更新之LuaFramework篇[02]--用Lua创建自己的面板
在上篇文章 Unity3D热更新之LuaFramework篇[01]--从零开始 中,我们了解了怎么获得一个可用的LuaFramework框架. 本篇将我会先介绍一下如何配置Lua开发环境,然后分析在 ...
- Unity3D热更新之LuaFramework篇[03]--prefab加载和Button事件
在上一篇文章 Unity3D热更新之LuaFramework篇[02]--用Lua创建自己的面板 中,我介绍了LuaFramework加载面板的方法,但这个方法并不适用于其它Prefab资源,在这套框 ...
- Unity3D热更新之LuaFramework篇[09]--资源热更新与代码热更新的具体实现
前言 在上一篇文章 Unity3D热更新之LuaFramework篇[08]--热更新原理及热更服务器搭建 中,我介绍了热更新的基本原理,并且着手搭建一台服务器. 本篇就做一个实战练习,真正的来实现热 ...
- Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法
时隔一个多月我又回来啦! 坚持真的是很难的一件事,其它事情稍忙,就很容易说服自己把写博客的计划给推迟了. 好在终于克服了自己的惰性,今天又开始了. 本篇继续我的Luaframework学习之路. 一. ...
- Unity3D热更新之LuaFramework篇[08]--热更新原理及热更服务器搭建
前言 前面铺垫了这么久,终于要开始写热更新了. Unity游戏热更新包含两个方面,一个是资源的更新,一个是脚本的更新. 资源更新是Unity本来就支持的,在各大平台也都能用.而脚本的热更新在iOS平台 ...
- Unity3D热更新之LuaFramework篇[01]--从零开始
前言 因工作关系,需要对手头的项目进行热更新支持.了解后发现,Lua的几个变种:XLua.ToLua(原uLua)和Slua都可以做Unity热更,而ToLua更是提供了一个简易的热更框架--LuaF ...
随机推荐
- MySQL TIMESTAMP(时间戳)详细解释
当你创建一个表假设表中有类型的字段TIMESTAMP,该字段默认情况下,语句生成: CREATE TABLE `test` ( `id` int(11) DEFAULT NULL, `ctime` t ...
- Kivy A to Z -- Kivy 示例演示自带名单
所有的样品已经在Android 4.04 手机正常进行 1.demo/kivycatalog 这个例子说明了如何使用主控件,例如Layout,Button,MediaPlayer,Progress B ...
- C# Winform制作虚拟键盘,支持中文
原文:C# Winform制作虚拟键盘,支持中文 最近在做一个虚拟键盘功能,代替鼠标键盘操作,效果如下: 实现思路: 1 构建中文-拼音 数据库, ...
- SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction 解决方法
SHOW FULL PROCESSLIST; KILL 263071
- WAMP采用别名时ThinkPHP5项目设置方法
打开public目录下的.htaccess文件,并在其中添加 RewriteBase /xxx<IfModule mod_rewrite.c> Options +FollowSymlink ...
- murmurhash2算法 和 DJB Hash算法是目前最流行的hash算法
murmurhash2算法 和 DJB Hash算法是目前最流行的hash算法 1.DJB HASH算法 1 2 3 4 5 6 7 8 9 10 11 /* the famous DJB Hash ...
- 超详细SQL SERVER 2016跨网段和局域网发布订阅配置图解和常见问题
原文:超详细SQL SERVER 2016跨网段和局域网发布订阅配置图解和常见问题 转载标明出处:http://blog.csdn.net/u012861467 前方高能,要有点耐心,图片较多,注意在 ...
- wp8.1之拍照(获取焦点,使用后置摄像头)
wp8.1 没有像wp8一样直接用启动器开启摄像头,他要开启摄像头要借助CaptureElement呈现来自捕获设备(如照相机或网络摄像机)的流.今天讲讲如何打开摄像头,获取焦点,以及拍照.废话不多说 ...
- 程序的开机关机重启,开机启动,休眠功能delphi实现(使用AdjustTokenPrivileges提升权限)
TShutDownStatus = (sdShutDown,sdReboot,sdLogOff,sdPowerOff); procedure ShutDown(sdStatus : TShutDown ...
- Faster RCNN 爬坑记录
训练 在博客http://blog.csdn.net/Suii_v5/article/details/73776299中介绍了基本的错误类型.我只是做一些自己问题的补充 在error6中,调整nump ...