【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 ...
随机推荐
- Linux系统下安装JDK8和Maven3.8.5
一.下载JDK8Linux版本 官网下载太慢了,小编这里为大家下载好了: 链接:百度网盘地址 提取码:ov24 二.下载Maven maven3.8.5下载链接 三.使用xftp上传到linux上 四 ...
- 2023强网拟态crypto-一眼看出
1.题目信息 一眼看穿 查看代码 from Crypto.Util.number import * from secret import flag import gmpy2 flag=b'' r = ...
- [转帖]Windows自带MD5 SHA1 SHA256命令行工具
https://www.cnblogs.com/huangrt/p/13961399.html 检验工具http://www.zdfans.com/html/4346.html HashMyFiles ...
- [转帖]docker build 中的 -f 选项
https://www.jianshu.com/p/06c35fd299b7 需要注意的是,在 docker build 命令接收的参数中,提供给 docker build 命令的 -f 选项应该 D ...
- 【转帖】在ECS上配置skywalking-nginx-lua
https://help.aliyun.com/document_detail/197660.html 此处以在CentOS 7.0上的操作为例. 配置Lua运行环境. 安装工具库. yum in ...
- [转帖]总结:Servlet
一.背景 开发了很久的web服务,使用了很多web框架,都忘记web技术最原始的模样了,今天来回顾下. 二.Servlet是什么? Servlet是sun公司提供的一门用于开发动态web资源的技术.我 ...
- [转帖]Oracle入门精读28-字符集 AL32UTF8与UTF8
字符(Character) 字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等. 字符编码(Character Encoding) 是一套法则,使用该法则能够对自然语言的字符的一个 ...
- Vue基础系列文章10---单文件组件
1.单文件组件的结构 <template> <!--这里用于定义VUE组件的模块内容--> <dvi> <h1>这是 APP 根组件</h1> ...
- net core控制台程序使用依赖注入读取appsettings.json配置文件
.net 2.1有用,转自https://www.jianshu.com/p/726d1aa2795c 1.项目下添加appsettings.json文件,并将属性-复制到输出目录,设置为如果较新则复 ...
- C/C++ 数据结构与算法笔记
实现顺序表 #include <stdio.h> #include <stdlib.h> #define MaxSize 10 int Insert_Elem(int Arra ...