【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 ...
随机推荐
- Laravel - blade 模板继承的使用
1. 模板文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- unix domain 与本地本地回环在进程间通信中的差异
前言: 127.0.0.1它是一个私有IP,代表的就是你的本机环回地址,其实本质上是绑定在虚拟网卡loopback上的IP. 在实际应用中,有遇到在使用本地回环做进程间通讯的时候程序阻塞的情况.比如下 ...
- [转帖]JVM随笔 --- 安全点(safe point)与 安全区域( safe region)
https://zhuanlan.zhihu.com/p/461298916 11 人赞同了该文章 最近回顾 JVM safe point 与 safe region 又有一些新的感悟与收获,特别写篇 ...
- Java进程内线程数量限制的相关学习
Java进程内线程数量限制的相关学习 背景 还是之前出现 cannot create native thread 的问题的后续 周末在家学习了下如何在容器外抓取dump. 也验证了下能否开启超过宿主机 ...
- [转帖]SQL SERVER DBCC命令详解
https://developer.aliyun.com/article/867768 简介: SQL数据库开发 DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区 在 ...
- [转帖]《Linux性能优化实战》笔记(20)—— 使用 tcpdump 和 Wireshark 分析网络流量
tcpdump 和 Wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器. tcpdump 仅支持命令行格式使用,常用在服务器中抓取和分析网络包.Wireshark 除了可 ...
- [转帖]修改jmeter内存配置(win&mac&linux)
目录 一.背景: 二.win环境下修改jmeter内存 三.mac&linux环境下修改jmeter内存 四.验证内存是否修改成功 一.背景: 在进行大数据.高并发压测的过程性,有时会遇上JM ...
- [转帖]CentOS8安装MySQL8详细教程,爬坑必备
https://www.ab62.cn/article/23022.html 安装环境 CentOS:8.5.2111MySQL:8.0.30 MySQL Community Server 安装过程 ...
- Gin 框架介绍与快速入门
Gin 框架介绍与快速入门 目录 Gin 框架介绍与快速入门 一.Gin框架介绍 1. 快速和轻量级 2. 路由和中间件 3. JSON解析 4. 支持插件 5. Gin相关文档 二.基本使用 1.安 ...
- 基于OpenIM 实现聊天机器人功能
### 简要描述 使用 OpenIM 中的 Webhook 机制实现聊天机器人功能.发送文本消息或图片消息给聊天机器人后,机器人会返回相同的消息.开发者可以替换此逻辑,在LangChain框架上调用L ...