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。

感悟

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

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

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这么香的技术还不快点学起来,含BATJM大厂

前言 北京字节跳动科技有限公司成立于2012年3月&#xff0c;是最早将人工智能应用于移动互联网场景的科技企业之一。其独立研发的“今日头条”客户端&#xff0c;开创了一种全新的新闻阅读模式。 我一直很向往这样有创新精神&#xff0c;并做出了巨大成果的大公司&#xff0c…

.net Core把一个list集合里面的所有字段的数值汇总

前言&#xff1a;此随笔仅供自己学习&#xff0c;如有不足还请指出 在很多时候&#xff0c;得到一个list集合&#xff0c;需要把里面的数据汇总&#xff0c;但我又不想写那么多循环&#xff0c;于是去.net core 官方文档找有没有相关方法&#xff0c;很可惜我没有找到&#xff…

openshift for linux

安装openshift 1、下载地址&#xff1a; https://github.com/openshift/origin/releases 3.11下载&#xff1a; https://github.com/openshift/origin/releases/tag/v3.11.0 https://github.com/openshift/origin/releases/download/v3.11.0/openshift-origin-server-v3.11…

这些Android高级必会知识点你能答出来几个?含BATJM大厂

前言 首先介绍一下自己&#xff0c;计算机水本&#xff0c;考研与我无缘。之前在帝都某公司算法部实习&#xff0c;公司算大公司吧&#xff0c;然而个人爱好偏开发&#xff0c;大二的时候写个一个app&#xff0c;主要是用各种框架。 一、掌握架构师筑基必备技能 二、掌握Andr…

Docker kafka

阅读目录 一、下载镜像二、先启动zookeeper三、启动kafka四、创建一个topic&#xff08;使用代码次步可省略&#xff09;五、kafka设置分区数量六、python代码回到顶部 一、下载镜像 docker pull wurstmeister/zookeeper docker pull wurstmeister/kafka 回到顶部 二、先启…

这些年Android面试的那些套路,社招面试心得

前言 说不焦虑其实是假的&#xff0c;因为无论是现在还是最近几年&#xff0c;很早就有人察觉Android开发的野蛮生长时代已经过去。过去的优势是市场需要&#xff0c;这个技术少有人有&#xff0c;所以在抢占市场的时候&#xff0c;基本上满足需要就已经可以了。但是现在&…

flask第一章:项目环境搭建

windows环境pycharmpython3 1、命令提示窗口 1&#xff09;创建项目目录&#xff1a;mkdir myblog 2&#xff09;cd myblog 3&#xff09;创建虚拟环境&#xff1a;python -m venv myvenv 4&#xff09;激活虚拟环境&#xff1a;venv\Scripts\activate 5&#xff09;安装flask&…

windows docker 空出C盘 迁移到其他盘

下面是操作方法&#xff1a; 首先关闭docker 关闭所有发行版&#xff1a;wsl --shutdown 将docker-desktop-data导出到D:\SoftwareData\wsl\docker-desktop-data\docker-desktop-data.tar&#xff08;注意&#xff0c;原有的docker images不会一起导出&#xff09;wsl --expo…

安卓开发入门到精通!免费Android高级工程师学习资源,系列篇

前言 2017年进大学开始接触Android&#xff0c;从刚开始接触就不断地听到Android市场饱和&#xff0c;工作难找等消息。虽然当时也非常迷茫&#xff0c;不过由于第一次深入接触编程语言&#xff0c;再加上自己的一点兴趣&#xff0c;就一直坚持下来了。 到现在要毕业了&#…

安卓开发基础面试题,9次Android面试经验总结,面试必备

前言 上回承诺过大家&#xff0c;一定会出 HTTP 的系列文章&#xff0c;今天终于整理完成了。作为一个 web 开发&#xff0c;HTTP 几乎是天天要打交道的东西&#xff0c;但我发现大部分人对 HTTP 只是浅尝辄止&#xff0c;对更多的细节及原理就了解不深了&#xff0c;在面试的…

基于TCP的在线聊天程序

在线聊天服务端 import tkinter import tkinter.font as tkFont import socket import threading import time import sys class ServerUI():local127.0.0.1port5505global serverSock;flagFalsedef __init__(self):self.roottkinter.Tk()self.root.title(在线聊天-服务端v1.0)…

Docker安装Confluence

Docker安装Confluence 参考链接: https://my.oschina.net/u/2289161/blog/1648587 https://hub.docker.com/r/cptactionhank/atlassian-confluence/dockerfile https://my.oschina.net/u/2289161/blog/1647061 https://my.oschina.net/u/2289161/blog/838218 https://hub.…

安卓开发基础面试题,Android面试必备的集合源码详解,附小技巧

去年无疑是 Flutter 技术如火如荼发展的一年。 每一个移动开发者都在为 Flutter 带来的“快速开发、富有表现力和灵活的 UI、原生性能”的特色和理念而痴狂&#xff0c;从超级 App 到独立应用&#xff0c;从纯 Flutter 到混合栈&#xff0c;开发者们在不同的场景下乐此不疲的探…

『算法』读书笔记 1.4算法分析 Part1

Chapter 1 本章结构 1.1Java语法 1.2数据抽象 1.3集合类抽象数据类型&#xff1a;背包 (Bags) 、队列 (Queues) 、栈 (Stacks) 1.4算法分析 1.5连通性问题&#xff0d;Case Study: Union - Find ADT 本节开篇使用了一个ThreeSum程序进行示例&#xff1a; ThreeSum所起到的作用…

JS调用MetaMask调用启动转账

1 、代码必须跑在nginx下&#xff0c;否则没有eth对象。 2、可以下载ganache来单跑个私服&#xff0c;然后安装谷歌metamask浏览器插件来实验 3、账户1:0xFA387e41FA471172cC729167EBD4862aA7020D91 账户2:0x818DF62ff0bE3B28AE8be25e2e848E10138018B7 4、1000000000000000 …

安卓开发工程师面试题!春招我借这份PDF的复习思路,不吃透都对不起自己

写在前面 身边有不少去大厂面试的朋友&#xff0c;其中小金面试字节跳动的经历很有意义&#xff0c;在这里分享给大家。小金是末流211计算机专业大三本科生&#xff0c;前几天面试了字节跳动的广州Android开发实习生。下面是他的面试经历&#xff0c;还有一些他自己的经验。 …

合算的日本料理

巨鹿路和那个茂名路路口的《和味》&#xff0c;有预订的话才98一个人&#xff0c;味道不错&#xff0c;楼上的桃子MM服务狠好&#xff0c;笑容狠甜。那里的东西味道还是狠正宗的&#xff0c;除了一个色拉不对。那里的清酒和梅酒都不错&#xff0c;尤其梅酒。生牛肉虽然没有大渔…

安卓开发必须会的技能!浅谈Android消息机制原理,威力加强版

目录 想要成为一名优秀的Android开发&#xff0c;你需要一份完备的知识体系&#xff0c;在这里&#xff0c;让我们一起成长为自己所想的那样。 PagerAdapter 介绍ViwePager 缓存策略ViewPager 布局处理ViewPager 事件处理相关内容 Android 基础 1.Activity 1、 什么是 Activi…

NuGet 无法连接到远程服务器-解决方法(转)

原地址&#xff1a; http://www.lixin.me/blog/2012/03/01/29362 今天打开NuGet的Manage NuGet Packages&#xff0c;显示“无法连接到远程服务器”。打开Setting-》Package Manager-》Package Sources。看到里面有一个源&#xff1a;https://go.microsoft.com/fwlink/?LinkID…

安卓开发面试书籍,全世界都在问Android开发凉了吗?建议收藏

前言 本想今年辞掉工作大干一场&#xff0c;没想到碰到疫情&#xff0c;家里蹲了3个月…&#xff0c;还好字节能给一次机会。前阵子字节跳动的提前批开始了&#xff0c;看宣传是说有海量HC&#xff0c;机会多多&#xff0c;本着涨涨面经的心理&#xff0c;然后就投递了一下杭州…