前言

用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。

感悟

持续更新博客的计划总是失败,想了想,也许是前几篇文章都写得太长了吧。

之前每写一篇,都要准备好久,写完总是到半夜,疲惫得不行。导致后来一想到写博,就有畏难情绪,就不想写了。

从这篇开始,每篇少写一点。希望每周都有输出,不求多,但求坚持。

转载于:https://www.cnblogs.com/imteach/p/11161214.html

Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的相关推荐

  1. [Unity热更新]tolua# LuaFramework(七):lua使用DOTween

    相关链接: http://blog.csdn.net/u010665359/article/details/50950989 http://blog.csdn.net/u010665359/artic ...

  2. tolua unity 报错_Unity3D热更新之LuaFramework篇[01]--从零开始

    解压刚刚下载好的压缩包,发现里面是一个Unity工程(如图2-1),于是用 unity打开此工程. 图2-1 我使用的Unity版本为5.5.5f1,会提示需要升级,是否备份,点"Go He ...

  3. lua 给userdata设置元表_UE4热更新:基于UnLua的Lua编程指南

    本片文章搬运自我自己的博客:原文链接: UE4热更新:基于UnLua的Lua编程指南 作者: ZhaLiPeng UE使用的是C++这种编译型语言,在编译之后就成了二进制,只有通过玩家重新安装才能打到 ...

  4. Unity3D 热更新方案(集合各位专家的汇总)

    http://blog.csdn.net/guofeng526/article/details/52662994 热更新"这个词,在Unity3D的应用下,是有些语义错误的,但是作为大家都熟 ...

  5. Unity3D热更新技术点——ToLua(上)

    注: 本文主要介绍tolua的基本原理及其在unity中的使用,希望阅读本文的读者有lua基础,可通过Lua教程 (其中也有IDE的推荐等)或其他途径先进行lua 的学习 热更新 在介绍tolua前, ...

  6. UE4热更新:基于UnLua的Lua编程指南

    UE4热更新:基于UnLua的Lua编程指南 https://imzlp.me/posts/36659/ https://imzlp.me/posts/36659/ Z's Blog 首页 归档 分类 ...

  7. Unity3D基础31:脚本生命周期

    前文:https://blog.csdn.net/Jaihk662/article/details/86751079(C#脚本) 一.脚本生命周期 脚本的生命周期,就是挂载到的游戏物体"从出 ...

  8. Unity3D动画游戏设计算法 --脚本生命周期

    1.实验的目的和要求 掌握脚本生命周期的概念,掌握MonoBehavior类,理解各个事件的含义.执行条件.执行过程,能够熟练利用各个事件实现相应的功能. 2.实验内容 编写相关代码,测试脚本生命周期 ...

  9. unity3d热更新插件uLua

    转自:http://blog.sina.com.cn/s/blog_930ffa0b0102vbat.html 前言 IOS不能热更新,不是因为不能用反射,是因为 System.Reflection. ...

最新文章

  1. Python 国产库推荐之 musicpy
  2. 圣殿骑士-移民结婚了,而且很年轻~
  3. Android 使用jarsigner给apk签名的方法详细介绍
  4. c++中容器(STL)的共性与使用的时机
  5. 冲击中国超融合第一,浪潮的底气从何而来?
  6. 深度学习(参数选择)
  7. 数据科学入门与实战:Seaborn001
  8. php输出内容到页面,php实时输出内容
  9. 预处理: 主成分分析和白化
  10. css3优惠卷上方锯齿_CSS不规则卡片,纯CSS制作优惠券样式,CSS实现锯齿样式
  11. Linux安装文件报错configure: error: no acceptable C compiler found in $PATH
  12. 外卖行业现状分析_2018年中国在线外卖行业市场现状及发展趋势分析 产品本地差异化细分或将为破局点...
  13. Pandas DataFrame为什么弃用.ix【个人看法】
  14. 软件工程师是青春饭吗?
  15. 程序人生-Hello‘sP2P
  16. 【Excle数据透视表】如何快速选定数据透视表的汇总行并添加绿色底纹
  17. 标题类、文本类、列表类、代码类、图文样式、表格布局、
  18. 代理服务器可能有问题,或地址不正确(已解决)
  19. Group BOM 和BOM group
  20. 旧款Mac开启随航(sideCar)功能

热门文章

  1. mysql添加映射模块_iis7.5中让html与shtml一样支持include功能(添加模块映射)
  2. oracle10g的rat模拟,Oracle 10g Logminer 研究及测试
  3. python pool_派松水潭(Python Pool)
  4. proftpd java_Proftpd:编译安装
  5. java员工编号程序_用JAVA编写一个employee类 为员工自动产生员工号
  6. webase crud查看所有表_Laravel-Gii 可视化代码生成工具 CRUD +GUI
  7. c++ array学习
  8. Visual Studio进行linux远程开发
  9. php的create_function、function_exists判断函数是否存在
  10. rocksdb原理_教你玩转MyRocks/RocksDB—STATISTICS与后台线程篇