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的生命周期的更多相关文章

  1. Unity3D MonoBehaviour的生命周期(lifecycle)

    官方的事件函数的执行顺序中有详解(Link:Execution Order of Event Functions) (图片来源:http://whatiseeinit.blogspot.com/201 ...

  2. unity3d中脚本生命周期(MonoBehaviour lifecycle)

    最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必然要问出一个问题:这么多个方法,执行先后顺序是如何的呢?内部是如何进行管理的呢?于是在网上找了许多资料,发现了Ri ...

  3. (转)unity3d中脚本生命周期(MonoBehaviour lifecycle)

    自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必 ...

  4. Unity3d学习 基础-关于MonoBehaviour的生命周期

    其实在刚接触Unity3D,会有一个疑问,关于Unity3D游戏运行的初始入口在哪?不像Cocos2dx还有个AppDelegate文件可以去理解.而且在刚开始就接触Unity3D时,看到所有脚本中编 ...

  5. MonoBehaviour Lifecycle(生命周期/脚本执行顺序)

    脚本执行顺序 前言 搭建一个示例来验证Unity脚本的执行顺序,大概测试以下部分: 物理方面(Physics) 渲染(Scene rendering) 输入事件(InputEvent) 流程图 Uni ...

  6. Unity3d脚本的生命周期

    接下来,做出一下讲解:最先执行的方法是Awake,这是生命周期的开始,用于进行激活时的初始化代码,一般可以在这个地方将当前脚本禁用:this.enable=false,如果这样做了,则会直接跳转到On ...

  7. Unity3D脚本的生命周期(执行顺序)

    Unity脚本中有许多固定的函数 例如Start();Update(); 而这些函数都有固定的执行顺序 搞清楚这些函数的执行顺序 对于我们理清代码的逻辑就显得尤为重要 举个简单的例子 //脚本A pu ...

  8. Unity3D 中 脚本(MonoBehaviour) 生命周期WaitForEndOfFrame需要注意的地方

    首先看看MonoBehaviour的生命周期 先上个图(来源 http://blog.csdn.net/qitian67/article/details/18516503): 1.Awake 和 St ...

  9. Unity3D_02_基类MonoBehaviour/自带函数以及脚本执行的生命周期

    导引: 其中Time,Input,Physics都是Unity中的全局变量.GameObject是游戏中的基本物件.GameObject是由Component组合而成的,GameObject本身必须有 ...

  10. Unity3D脚本(MonoBehaviour)生命周期

    场景中有2个物体:A,B 每一个物体上绑定2个脚本:A,B 初始化log: Object : A , Script : B , Message : Awake Object : A , Script ...

随机推荐

  1. Laravel - blade 模板继承的使用

    1. 模板文件 <!DOCTYPE html> <html lang="en"> <head>     <meta charset=&qu ...

  2. unix domain 与本地本地回环在进程间通信中的差异

    前言: 127.0.0.1它是一个私有IP,代表的就是你的本机环回地址,其实本质上是绑定在虚拟网卡loopback上的IP. 在实际应用中,有遇到在使用本地回环做进程间通讯的时候程序阻塞的情况.比如下 ...

  3. [转帖]JVM随笔 --- 安全点(safe point)与 安全区域( safe region)

    https://zhuanlan.zhihu.com/p/461298916 11 人赞同了该文章 最近回顾 JVM safe point 与 safe region 又有一些新的感悟与收获,特别写篇 ...

  4. Java进程内线程数量限制的相关学习

    Java进程内线程数量限制的相关学习 背景 还是之前出现 cannot create native thread 的问题的后续 周末在家学习了下如何在容器外抓取dump. 也验证了下能否开启超过宿主机 ...

  5. [转帖]SQL SERVER DBCC命令详解

    https://developer.aliyun.com/article/867768   简介: SQL数据库开发 DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区 在 ...

  6. [转帖]《Linux性能优化实战》笔记(20)—— 使用 tcpdump 和 Wireshark 分析网络流量

    tcpdump 和 Wireshark 是最常用的网络抓包和分析工具,更是分析网络性能必不可少的利器. tcpdump 仅支持命令行格式使用,常用在服务器中抓取和分析网络包.Wireshark 除了可 ...

  7. [转帖]修改jmeter内存配置(win&mac&linux)

    目录 一.背景: 二.win环境下修改jmeter内存 三.mac&linux环境下修改jmeter内存 四.验证内存是否修改成功 一.背景: 在进行大数据.高并发压测的过程性,有时会遇上JM ...

  8. [转帖]CentOS8安装MySQL8详细教程,爬坑必备

    https://www.ab62.cn/article/23022.html 安装环境 CentOS:8.5.2111MySQL:8.0.30 MySQL Community Server 安装过程 ...

  9. Gin 框架介绍与快速入门

    Gin 框架介绍与快速入门 目录 Gin 框架介绍与快速入门 一.Gin框架介绍 1. 快速和轻量级 2. 路由和中间件 3. JSON解析 4. 支持插件 5. Gin相关文档 二.基本使用 1.安 ...

  10. 基于OpenIM 实现聊天机器人功能

    ### 简要描述 使用 OpenIM 中的 Webhook 机制实现聊天机器人功能.发送文本消息或图片消息给聊天机器人后,机器人会返回相同的消息.开发者可以替换此逻辑,在LangChain框架上调用L ...