Unity3D MonoBehaviour的生命周期(lifecycle)
官方的事件函数的执行顺序中有详解(Link:Execution Order of Event Functions)

(图片来源:http://whatiseeinit.blogspot.com/2012/10/unity3d-monobehaviour-lifecycle.html)
通过实际操作来测试上述的流程:
1、新建一个场景:LifecycleTest
2、在同级目录下新建一个C#脚本:LifecycleTest.cs,代码如下:
using System;
using UnityEngine; [ExecuteInEditMode]
public class LifecycleTest : MonoBehaviour { private void Awake()
{
Debug.Log("Awake" + DateTime.Now.ToString());
} private void Reset()
{
Debug.Log("Reset" + DateTime.Now.ToString());
} private void OnEnable()
{
Debug.Log("OnEnable" + DateTime.Now.ToString());
} private void OnDisable()
{
Debug.Log("OnDisable" + DateTime.Now.ToString());
} private void OnDestroy()
{
Debug.Log("OnDestroy" + DateTime.Now.ToString());
} // Use this for initialization
void Start () {
Debug.Log("Start" + DateTime.Now.ToString());
} // Update is called once per frame
void Update () {
Debug.Log("Update" + DateTime.Now.ToString());
}
}
3、将LifecycleTest.cs脚本拖拽至LifecycleTest场景的主相机(Main Camera)上(或者选中主相机,在检视图 — Inspector 中最底部按钮 Add Component,输入“LifecycleTest”然后回车,将选中的脚本附加到主相机中);
4、此时,控制台上将能看到相应的输出
Awake –> OnEnable –> Reset –> Start –> Update

当场景卸载时(比如双击切换到另一个场景时,当前场景会被卸载 – unload),此时会触发:
OnDisable –> OnDestroy
当场景被载入时(load)
Awake –> OnEnable –> Start –> Update
当C#脚本被修改时(Modified)时
OnDisable –> OnEnable
我们会发现上面有二对相对应的函数:
Awake —— OnDestroy
OnEnable —— OnDisable
卸载时是 OnDisable –> OnDestroy,加载时是 Awake –> OnEnable。
注意动态创建的实例对象,记得显示设置隐藏标记(HideFlags)以便更加准确控制其生命周期,避免报错或其它意外的发生。
using UnityEngine;
using System.Collections; public class ExampleClass : MonoBehaviour
{
// Creates a material that is explicitly created & destroyed by the component.
// Resources.UnloadUnusedAssets will not unload it, and it will not be editable by the inspector.
private Material ownedMaterial;
void OnEnable()
{
ownedMaterial = new Material(Shader.Find("Diffuse"));
ownedMaterial.hideFlags = HideFlags.HideAndDontSave;
GetComponent<Renderer>().sharedMaterial = ownedMaterial;
} // Objects created as hide and don't save must be explicitly destroyed by the owner of the object.
void OnDisable()
{
DestroyImmediate(ownedMaterial);
}
}
HideFlags的值为枚举类型,详细的参数请参考官网>>
Unity3D MonoBehaviour的生命周期(lifecycle)的更多相关文章
- unity3d中脚本生命周期(MonoBehaviour lifecycle)
最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必然要问出一个问题:这么多个方法,执行先后顺序是如何的呢?内部是如何进行管理的呢?于是在网上找了许多资料,发现了Ri ...
- (转)unity3d中脚本生命周期(MonoBehaviour lifecycle)
自:http://blog.csdn.net/qitian67/article/details/18516503 最近在做一个小示例,发现类继承于MonoBehaviour的类,有很多个方法,于是乎必 ...
- Tomcat 8(九)解读Tomcat组件的生命周期(Lifecycle)
Tomcat 8(七)解读Bootstrap介绍过.运行startup.bat.将引发Tomcat一连串组件的启动.事实上这一连串启动是通过组件的生命周期(Lifecycle)实现的 今天来看看Lif ...
- How tomcat works(深入剖析tomcat)生命周期Lifecycle
How Tomcat Works (6)生命周期Lifecycle 总体概述 这一章讲的是tomcat的组件之一,LifeCycle组件,通过这个组件可以统一管理其他组件,可以达到统一启动/关闭组件的 ...
- Unity3d学习 基础-关于MonoBehaviour的生命周期
其实在刚接触Unity3D,会有一个疑问,关于Unity3D游戏运行的初始入口在哪?不像Cocos2dx还有个AppDelegate文件可以去理解.而且在刚开始就接触Unity3D时,看到所有脚本中编 ...
- Unity3d脚本的生命周期
接下来,做出一下讲解:最先执行的方法是Awake,这是生命周期的开始,用于进行激活时的初始化代码,一般可以在这个地方将当前脚本禁用:this.enable=false,如果这样做了,则会直接跳转到On ...
- Unity3D脚本的生命周期(执行顺序)
Unity脚本中有许多固定的函数 例如Start();Update(); 而这些函数都有固定的执行顺序 搞清楚这些函数的执行顺序 对于我们理清代码的逻辑就显得尤为重要 举个简单的例子 //脚本A pu ...
- Yii2基本概念之——生命周期(LifeCycle)
人有生老病死,一年有春夏秋冬四季演替,封建王朝有兴盛.停滞.衰亡的周期律--"其兴也勃焉,其亡也忽焉".换句话说,人,季节,王朝等等这些世间万物都有自己的生命周期.同样地,在软件行 ...
- Vue 生命周期LIFECYCLE是8个吗?
vue生命周期钩子个数是:11个. export const LIFECYCLE_HOOKS = [ 'beforeCreate', 'created', 'beforeMount', 'mounte ...
随机推荐
- Highcharts 使用
官网:https://www.hcharts.cn/ api:https://api.hcharts.cn/highcharts 效果 html代码 <div id="containe ...
- Annoy 近邻算法
Annoy 随机选择两个点,以这两个节点为初始中心节点,执行聚类数为2的kmeans过程,最终产生收敛后两个聚类中心点 二叉树底层是叶子节点记录原始数据节点,其他中间节点记录的是分割超平面的信息 但是 ...
- 线上Slave报1062的案例
最近经常线上的Slave老报1062的错误,蛋碎一地,幸好Slave暂时没有用到业务上,也就是说没有做读写分离,所以Slave有问题,影响也不大,但每隔一阵子就报1062主键冲突的错误,让我好纠结,如 ...
- Linux学习笔记:使用shell脚本实现ftp的自动上传下载
在 Linux 下可以利用 Shell 实现 ftp 文件的自动上传和下载,封装至 crontab 更可实现定时调度. 1.ftp自动登录批量下载文件 ##### 从ftp服务器上的/home/dat ...
- 步步为营-68-asp.net简单练习(get set)
1 加法计算器 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- 对字符串进行频繁拼接的话,使用StringBuffer或者StringBuilder
package zhengze; /*如果需要对字符串进行频繁拼接的话,使用StringBuffer或者StringBuilder StringBuffer:[字符串缓冲器]是线程安全的,效率低 St ...
- Webpack安装和命令
1.定位到创建的目录 cd H:\webpacktest 2.初始化: npm init 3.一路回车 4.执行(安装到项目的依赖项中) npm install webpack --save-dev ...
- easyx的基础应用教程
引用 什么是 EasyX? 作者:EasyX EasyX 是针对 C++ 的图形库,可以帮助 C 语言初学者快速上手图形和游戏编程. 比如,可以用 VC + EasyX 很快的用几何图形画一个房子,或 ...
- requirejs模块路径配置问题
三种情况:一.设置data-main,没配置baseUrl,以data-main的文件为基准:二.设置data-main,配置baseUrl,baseUrl以值以引用require.js的HTML为基 ...
- js获取宽度
alert(window.screen.width );//浏览设备的分辨率(电脑.手机.平板等) alert(window.screen.availWidth );//浏览设备的实际可用宽度(电脑. ...