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 ...
随机推荐
- 【mysql】一个很小但很影响速度的地方
如果要插入一大批数据,千万不要一条一条的execute, commit.而应该是先全部execute,最后统一commit!!! 千万注意,时间差距还是很大的!! 正确示范:快 ): sql = &q ...
- AlexNet
AlexNet学习笔记 目录 AlexNet整体结构 CNN 全连接 TensorFlow实现 AlexNet是2012年ImageNet竞赛冠军获得者Hinton和他的学生Alex Krizhevs ...
- django----Form扩展
用第二种方式需要加上下面的这个: 三.判断用户民是不存在,存在就不添加了 from django.core.exceptions import ValidationError initial 修改时 ...
- 数据库中的null用法
- IntelliJ IDEA快捷键:Ctrl+Alt+B
To navigate to the implementation(s) of an abstract method,position the caret at its usage or its na ...
- 使用拷贝文件测试(BufferedInputStream,FileInputStream)
package com.demo; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ja ...
- Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)
A.B都是暴力搞一搞. A: #include<bits/stdc++.h> #define fi first #define se second #define mk make_pair ...
- Python接收执行参数
1.python内置模块sys的sys.argv函数会将解释器执行时的所有参数保存为一个列表. a.首先创建文件login.py #!/usr/bin/env python #-*- coding:u ...
- Unity3D 中的面向对象设计 {游戏对象(创建、删除、获取),以及添加修改组件}
一.创建游戏对象 游戏对象分三种:(1) 将物体模型等资源由Project工程面板拖拽到Hierarchy层次面板中 (2) 由GameObject菜单创建Unity自带的游戏对象,如Cube.Cam ...
- MATLAB·提取图像中多个目标
基于matlab工具箱提取图像中的多目标特征(代码如下): 代码前面部分为提取图像的边界信息,调用了后面的遍历函数Pixel_Search,函数实现方法见后~ %%ROI Testing close ...