【Unity3D】MonoBehaviour的生命周期
1 前言
Unity3D 中可以给每个游戏对象添加脚本,这些脚本必须继承 MonoBehaviour,用户可以根据需要重写 MonoBehaviour 的部分生命周期函数,这些生命周期函数由系统自动调用,且调用顺序与书写顺序无关。
MonoBehaviour 的继承关系:MonoBehaviour→Behaviour→Component→Object.
MonoBehaviour 的生命周期函数主要有:
- OnValidate: 确认事件,脚本被加载、启用、禁用、Inspector 面板值被修改时,都会执行一次
- Awake:唤醒事件,只执行 1 次,游戏一开始运行就执行。
- OnEnable:启用事件,只执行 1 次,当脚本组件被启用的时候执行一次。
- Start:开始事件,只执行 1 次。
- FixedUpdate:固定更新事件,每隔 0.02 秒执行一次,所有物理组件相关的更新都在这个事件中处理。
- Update:更新事件,每帧执行 1 次。
- LateUpdate:稍后更新事件,每帧执行 1 次,在 Update 事件执行完毕后再执行。
- OnGUI:GUI渲染事件,每帧执行 2 次。
- OnDisable:禁用事件,只执行1 次,在 OnDestroy 事件前执行,或者当该脚本组件被禁用后,也会触发该事件。
- OnDestroy:销毁事件,只执行 1 次,当脚本所挂载的游戏物体被销毁时执行。
2 验证
LifeCycle.cs
using UnityEngine;
public class LifeCycle : MonoBehaviour {
// 确认事件, 脚本被加载、启用、禁用、Inspector面板值被修改时, 都会执行一次
private void OnValidate() {
Debug.Log("OnValidate");
}
// 唤醒事件,只执行 1 次,游戏一开始运行就执行
private void Awake() {
Debug.Log("Awake");
}
// 启用事件,只执行 1 次,当脚本组件被启用的时候执行一次
private void OnEnable() {
Debug.Log("OnEnable");
}
// 开始事件,只执行 1 次
private void Start() {
Debug.Log("Start");
}
// 固定更新事件,每隔 0.02 秒执行一次,所有物理组件相关的更新都在这个事件中处理
private void FixedUpdate() {
// Debug.Log("FixedUpdate");
}
// 更新事件,每帧执行 1 次
private void Update() {
// Debug.Log("Update");
}
// 稍后更新事件,每帧执行 1 次,在 Update 事件执行完毕后再执行
private void LateUpdate () {
// Debug.Log("LateUpdate");
}
// GUI渲染事件,每帧执行 2 次
private void OnGUI () {
// Debug.Log("OnGUI");
}
// 禁用事件,只执行1 次,在 OnDestroy 事件前执行,或者当该脚本组件被禁用后,也会触发该事件
private void OnDisable () {
Debug.Log("OnDisable");
}
// 销毁事件,只执行 1 次,当脚本所挂载的游戏物体被销毁时执行
private void OnDestroy () {
Debug.Log("OnDestroy");
}
}
每帧都执行的日志就不放了,读者可以自行打开,这里只看下只执行几次的生命周期函数日志,如下:

3 完整生命周期

声明:本文转自【Unity3D】MonoBehaviour的生命周期
【Unity3D】MonoBehaviour的生命周期的更多相关文章
- Unity3D MonoBehaviour的生命周期(lifecycle)
官方的事件函数的执行顺序中有详解(Link:Execution Order of Event Functions) (图片来源:http://whatiseeinit.blogspot.com/201 ...
- unity3d中脚本生命周期(MonoBehaviour lifecycle)
最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必然要问出一个问题:这么多个方法,执行先后顺序是如何的呢?内部是如何进行管理的呢?于是在网上找了许多资料,发现了Ri ...
- (转)unity3d中脚本生命周期(MonoBehaviour lifecycle)
自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必 ...
- Unity3d学习 基础-关于MonoBehaviour的生命周期
其实在刚接触Unity3D,会有一个疑问,关于Unity3D游戏运行的初始入口在哪?不像Cocos2dx还有个AppDelegate文件可以去理解.而且在刚开始就接触Unity3D时,看到所有脚本中编 ...
- MonoBehaviour Lifecycle(生命周期/脚本执行顺序)
脚本执行顺序 前言 搭建一个示例来验证Unity脚本的执行顺序,大概测试以下部分: 物理方面(Physics) 渲染(Scene rendering) 输入事件(InputEvent) 流程图 Uni ...
- Unity3d脚本的生命周期
接下来,做出一下讲解:最先执行的方法是Awake,这是生命周期的开始,用于进行激活时的初始化代码,一般可以在这个地方将当前脚本禁用:this.enable=false,如果这样做了,则会直接跳转到On ...
- Unity3D脚本的生命周期(执行顺序)
Unity脚本中有许多固定的函数 例如Start();Update(); 而这些函数都有固定的执行顺序 搞清楚这些函数的执行顺序 对于我们理清代码的逻辑就显得尤为重要 举个简单的例子 //脚本A pu ...
- Unity3D 中 脚本(MonoBehaviour) 生命周期WaitForEndOfFrame需要注意的地方
首先看看MonoBehaviour的生命周期 先上个图(来源 http://blog.csdn.net/qitian67/article/details/18516503): 1.Awake 和 St ...
- Unity3D_02_基类MonoBehaviour/自带函数以及脚本执行的生命周期
导引: 其中Time,Input,Physics都是Unity中的全局变量.GameObject是游戏中的基本物件.GameObject是由Component组合而成的,GameObject本身必须有 ...
- Unity3D脚本(MonoBehaviour)生命周期
场景中有2个物体:A,B 每一个物体上绑定2个脚本:A,B 初始化log: Object : A , Script : B , Message : Awake Object : A , Script ...
随机推荐
- http-长连接
1. 短链接 http1.0 -- 1个请求-响应过程会创建且1个新的连接 2. 长连接 http1.1 -- 同域下可以创建1个tcp连接,多个请求在同一个tcp上串行处理请求 http2.0 -- ...
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.22)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- [转帖]jmeter实现不写代码把测试结果存入execl
这里使用数据库作为中间件来实现不写代码就把测试结果存入execl,下面是步骤 1.新建一个setup线程组用来设置数据库连接信息和新建数据库,如下图所示,我们使用sqlite数据库来存储信息,因为不需 ...
- [转帖]MySQL ALTER TABLE: ALTER vs CHANGE vs MODIFY COLUMN
https://www.cnblogs.com/pachongshangdexuebi/p/5029152.html ALTER COLUMN 语法: ALTER [COLUMN] col_name ...
- 【转帖】ARM 虚拟化技术简介
一. 虚拟化技术二. 虚拟化技术的比较2.1 全虚拟化和二进制重写(Pure virtualization and binary rewriting)2.2 半虚拟化( Para-virtualiza ...
- [转帖]nginx 启动、重启、关闭命令详解
https://www.jianshu.com/p/d70006f18a6d 作者:Gakki nginx 命令详解 输入命令:nginx -h nginx -h -?,-h:查看帮助 -v:显示 ...
- [转帖]远超DDR4,速度可达DDR5 6400!DDR5内存技术、产品解析
https://www.sohu.com/a/326810241_616364 内存是计算机技术的重要组成部分,经历了长时间的竞争更替和路线选择之后,PC内存技术被稳定在以DDR技术为基础的发展路线上 ...
- Go实现网络代理
使用 Go 语言开发网络代理服务可以通过以下步骤完成.这里,我们将使用 golang.org/x/net/proxy 包来创建一个简单的 SOCKS5 代理服务作为示例. 步骤 1. 安装 golan ...
- STM32CubeMX教程27 SDIO - 读写SD卡
1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 ...
- vs2019系统内置方法无提示
有个同事问我为什么他的vs编写C#代码,对于引用System.dll中的方法,鼠标移上去没有方法的使用说明或接口注释,具体可以看下面的截图,而我绝大多数情况下是使用Rider开发,并没有遇到这个问题, ...