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 ...
随机推荐
- web----Twisted
Twisted模块: Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如:网络协议.线程.数据库管理.网络操作.电子邮件等.
- python+selenium十一:jQuery和js语法、js处理iframe
selenium 执行jQuery/js语法 driver.execute_script(jQuery/js) 1.jQuery jQuery只支持css语法: jquery = '$(CSS).va ...
- JS高级 - 面向对象5(继承,引用)
<script type="text/javascript"> //------------------Person类 //(Person)的构造函数 function ...
- HDU 1851 (N个BASH博弈子游戏)
题意:n堆石子,分别有M1,M2,·······,Mn个石子,各堆分别最多取L1,L2,·····Ln个石头,两个人分别取,一次只能从一堆中取,取走最后一个石子的人获胜.后选的人获胜输出Yes,否则输 ...
- POJ 2395 Out of Hay (Kruskal)
题意:从待选的路里面选出若干将所有点连通,求选出的边里最长边的最小值. 算法:要使得树的最长边最小,那么每次确定的边都应是待选边里最小的,即最小生成树.对应Kruskal算法. #include &l ...
- 【AtCoder】CODE FESTIVAL 2017 qual C
A - Can you get AC? No #include <bits/stdc++.h> #define fi first #define se second #define pii ...
- 【Java】 剑指offer(4) 替换空格
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现一个函数,把字符串中的每个空格替换成"%20&quo ...
- 008 Spark中standalone模式的HA(了解,知道怎么配置即可)
standalone也存在单节点问题,这里主要是配置两个master. 1.官网 2.具体的配置 3.配置方式一(不是太理想) 这种知识基于未来可以重启,但是不能在宕机的时候提供服务. 方式一:Sin ...
- UVA 11624-Fire!【双BFS】
<题目链接> 题目大意: 你的任务是帮助J走出一个大火蔓延的迷宫.J每分钟可以超上下左右四个方向移动,而所有着火的格子每一分钟都会往四个方向蔓延一格.迷宫中有一些障碍,J和火都无法进入.当 ...
- pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)
pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...