设某个组件为NewBehaviour

OnEnabled被调用的情况:

1、GameObject添加组件的时候,即AddComponet<NewBehaviour> ;

2、包含3、已添加NewBehaviour的GameObject由未激活到已激活的时候,即setActive(true) ;

4、其中2、3会调用该GameObject及其所有子对象的OnEnabled。

OnDisabled被调用的情况:

1、GameObject被销毁;

2、NewBehaviour被销毁;

3、已添加NewBehaviour的GameObject由已激活到未激活的时候,即setActive(false);

4、NewBehaviour由不可用到可用的时候,即enabled=false。

其中1、3会调用该GameObject及其所有子对象的OnEnabled。

一个简单的测试代码:

    using UnityEngine;
    using System.Collections;  

    public class NewBehaviour : MonoBehaviour {
        ;
        void Awake()
        {
            Debug.Log ("Awake");
        }
        // Use this for initialization
        void Start () {
            ) {
                Debug.Log ("NB");
                NewBehaviour nb = new NewBehaviour ();
                Debug.Log ("SetActive");
                gameObject.SetActive (false);
                gameObject.SetActive (true);
                Debug.Log ("enabled");
                this.enabled = false;
                this.enabled = true;
                Debug.Log ("Destroy");
                Destroy (this);
                idx = ;
            }
            ) {
                Debug.Log ("Add");
                gameObject.AddComponent<NewBehaviour> ();
                Debug.Log ("Destroy go");
                Destroy (gameObject);
                idx = ;
            }
            ) {
                Debug.Log ("Instantiate");
                GameObject obj = Resources.Load<GameObject> ("New Prefab");
                Instantiate (obj);
                idx = ;
            }
        }  

        // Update is called once per frame
        void Update () {  

        }  

        void OnEnable()
        {
            Debug.Log ("OnEnable" + idx);
        }
        void OnDisable()
        {
            Debug.Log("OnDisable" + idx);
        }
    }  

此外,场景里新建一个GameObject,添加NewBehaviour,在Assets里新建Resources目录,将新建的GameObject保存为Prefab。

点击运行,打印结果:

    Awake
    OnEnable0
    NB
    [Warning]You are trying to create a MonoBehaviour using the 'new' keyword.  This is not allowed.  MonoBehaviours can only be added using AddComponent().  Alternatively, your script can inherit from ScriptableObject or no base class at all
    SetActive
    OnDisable0
    OnEnable0
    enabled
    OnDisable0
    OnEnable0
    Destroy
    OnDisable0
    Add
    Awake
    OnEnable1
    Destroy go
    OnDisable1
    Instantiate
    Awake
    OnEnable2  

取消运行后,会增加一行:

OnDisable3  

由此我们可以验证上面的论点,顺便得出以下结论:

1、Awake在OnEnable之前,OnEnable在Start之前。

2、New一个Component不仅会报警告,并且并不会调用OnEnable、OnDisable等方法。

最后补充几点:

1、被销毁时先调用OnDisable再调用OnDestroy。

2、当前组件会在Start执行完之后被销毁,具体销毁时机不明……总之不会执行Update。

3、如果把Destroy换成DestroyImmediate会报错,因为当前组件已经被销毁,gameObject无法被引用到。

Untiy3D开发小贴士 OnEnabled与OnDisabled的更多相关文章

  1. Web开发小贴士 -- 全面了解Cookie

    一.Cookie的出现 浏览器和服务器之间的通信少不了HTTP协议,但是因为HTTP协议是无状态的,所以服务器并不知道上一次浏览器做了什么样的操作,这样严重阻碍了交互式Web应用程序的实现. 针对上述 ...

  2. 移动web app开发小贴士 收藏有用

    1 创建主屏幕图标 (Creating a home screen icon ,for ios)   1 2 3 4 5 6 //57*57 <link rel="apple-touc ...

  3. web移动开发小贴士

    1.判断手机类型 var u = navigator.userAgent; || u.indexOf(; //android var isiOS = !!u.match(/\(i[^;]+;( U;) ...

  4. SharePoint每日小贴士Web部件

    SharePoint每日小贴士Web部件 项目描写叙述         此Web部件从指定SP自己定义列表或一个选定的 RSS源选择一个随机项目.并显示一张图片.标题和一个Tip.         适 ...

  5. SVN小贴士

    我辛辛苦苦写的到哪里了? SVN小贴士SVN服务器上的代码项目组公用,你的每一个提交都会体现给项目组每个人,所以提交要慎重,要注意避免代码冲突,使用SVN小贴士: 1.提前宣布开发计划,保持项目组成员 ...

  6. C和C++的内存操作小贴士(一):const char*的内存释放问题

    C和C++的内存操作一直是困扰开发人员的老问题,基本概念相信老司机们都很清楚了,在这里就不做过多的描述了,只是把在实际开发中可能遇到的一些小问题的案例列举下,供大家参考.“C和C++的内存操作小贴士” ...

  7. Angular2 小贴士 Name

    Angular2 正式版已经发布了一个月了,我也是通过各种方式在进行验证是否可以满足我们的需求,今天我就发现了一个问题.现在我们来一起说明一下,这个可能不算是bug,而应该需要我们记住就可以了. 我们 ...

  8. 【小贴士】虚拟键盘与fixed带给移动端的痛!

    前言 今天来公司的主要目的就是研究虚拟键盘与fixed的问题,期间因为同事问起闭包与事件委托(阻止冒泡)相关问题,便穿插了一篇别的: [小贴士]工作中的”闭包“与事件委托的”阻止冒泡“,有兴趣的朋友可 ...

  9. Windows统一平台: 开发小技巧

    Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...

随机推荐

  1. 2014 39th ACM-ICPC 北京赛区 总结

    万万没想到,拿金了. 在经历了西安赛区的打铁经历,感觉我们已经很坦然了.怎么说呢,虽说有阴影,但那也是成长的一步.我在西安打铁之后跟队友跟姐姐说过“如果北京是铜或者铁,我就退役”.记得曾经,很多人问我 ...

  2. Ubuntu16.04 VTK7.1.0+QT4.8.6+QtCreator开发环境配置

    VTK需要OpenGL3.0或更高版本的驱动,但虚拟机下的Ubuntu不支持OpenGL3.0,或者自己按网上教程配置之后也能支持,但过程相当繁琐,本人试验失败. 最终决心采用双系统,装好之后,执行g ...

  3. Ubuntu 16.04 安装ftp服务器

    1.sudo apt-get update 2.sudo apt-get install vsftpd ,执行完该步骤,vsftpd服务已经安装 3.创建ftp用户 a,创建用户目录 sudo mkd ...

  4. ESXI6.0启用 snmp

    1.首先通过ILO登录远程控制桌面然后按F2输入密码后进入 2.开启shell 3.按住 Alt + F1 切换到shell 4.启用 snmp   esxcli system snmp set -- ...

  5. 如何编写稳定流畅的iOS移动端应用

    原文链接:http://www.jianshu.com/p/f4adce56166f 不忘初心 在过去几年间,移动应用以雷霆之势席卷全球.我们在工作和休闲时间中使用互联网的方式,已经随着移动应用的前进 ...

  6. Spring学习(一)

    1.既然是学习Spring,我们首先要搞清楚Spring是什么? Spring是分层的.JavaSE/EE一站式的.轻量级的开源框架. 2.Spring的核心 百度百科:Spring是基于IOC和AO ...

  7. maven打包问题

    <build> <finalName>项目名</finalName> <!-- 配置maven打包时过滤的文件 --> <resources> ...

  8. oracle sql 执行计划分析

    转自http://itindex.net/detail/45962-oracle-sql-%E8%AE%A1%E5%88%92 一.首先创建表 SQL> show user USER is &q ...

  9. IMD中一些JS方法总结

    1,日期格式化(如格式成2013-12-27 15:30,new Date().format("yyyy-MM-dd hh:mm:ss"),这种格式在safari浏览器上会出问题, ...

  10. 相机标定简介与MatLab相机标定工具箱的使用(未涉及原理公式推导)

    相机标定 一.相机标定的目的 确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数. 二.通用摄像机模型 世界坐标系.摄像机坐标 ...