官方的事件函数的执行顺序中有详解(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)的更多相关文章

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

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

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

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

  3. Tomcat 8(九)解读Tomcat组件的生命周期(Lifecycle)

    Tomcat 8(七)解读Bootstrap介绍过.运行startup.bat.将引发Tomcat一连串组件的启动.事实上这一连串启动是通过组件的生命周期(Lifecycle)实现的 今天来看看Lif ...

  4. How tomcat works(深入剖析tomcat)生命周期Lifecycle

    How Tomcat Works (6)生命周期Lifecycle 总体概述 这一章讲的是tomcat的组件之一,LifeCycle组件,通过这个组件可以统一管理其他组件,可以达到统一启动/关闭组件的 ...

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

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

  6. Unity3d脚本的生命周期

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

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

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

  8. Yii2基本概念之——生命周期(LifeCycle)

    人有生老病死,一年有春夏秋冬四季演替,封建王朝有兴盛.停滞.衰亡的周期律--"其兴也勃焉,其亡也忽焉".换句话说,人,季节,王朝等等这些世间万物都有自己的生命周期.同样地,在软件行 ...

  9. Vue 生命周期LIFECYCLE是8个吗?

    vue生命周期钩子个数是:11个. export const LIFECYCLE_HOOKS = [ 'beforeCreate', 'created', 'beforeMount', 'mounte ...

随机推荐

  1. web----Twisted

    Twisted模块: Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如:网络协议.线程.数据库管理.网络操作.电子邮件等.

  2. python+selenium十一:jQuery和js语法、js处理iframe

    selenium 执行jQuery/js语法 driver.execute_script(jQuery/js) 1.jQuery jQuery只支持css语法: jquery = '$(CSS).va ...

  3. JS高级 - 面向对象5(继承,引用)

    <script type="text/javascript"> //------------------Person类 //(Person)的构造函数 function ...

  4. HDU 1851 (N个BASH博弈子游戏)

    题意:n堆石子,分别有M1,M2,·······,Mn个石子,各堆分别最多取L1,L2,·····Ln个石头,两个人分别取,一次只能从一堆中取,取走最后一个石子的人获胜.后选的人获胜输出Yes,否则输 ...

  5. POJ 2395 Out of Hay (Kruskal)

    题意:从待选的路里面选出若干将所有点连通,求选出的边里最长边的最小值. 算法:要使得树的最长边最小,那么每次确定的边都应是待选边里最小的,即最小生成树.对应Kruskal算法. #include &l ...

  6. 【AtCoder】CODE FESTIVAL 2017 qual C

    A - Can you get AC? No #include <bits/stdc++.h> #define fi first #define se second #define pii ...

  7. 【Java】 剑指offer(4) 替换空格

    本文参考自<剑指offer>一书,代码采用Java语言.  更多:<剑指Offer>Java实现合集 题目 请实现一个函数,把字符串中的每个空格替换成"%20&quo ...

  8. 008 Spark中standalone模式的HA(了解,知道怎么配置即可)

    standalone也存在单节点问题,这里主要是配置两个master. 1.官网 2.具体的配置 3.配置方式一(不是太理想) 这种知识基于未来可以重启,但是不能在宕机的时候提供服务. 方式一:Sin ...

  9. UVA 11624-Fire!【双BFS】

    <题目链接> 题目大意: 你的任务是帮助J走出一个大火蔓延的迷宫.J每分钟可以超上下左右四个方向移动,而所有着火的格子每一分钟都会往四个方向蔓延一格.迷宫中有一些障碍,J和火都无法进入.当 ...

  10. pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)

    pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...