Awake与Start函数的区别详解

转载 2015年07月10日 13:19:30

非原创,觉得说的很透彻,故转载。
文章来源:http://blog.csdn.net/Haohan_Meng/article/details/21857029

在Unity中编写脚本时,有一系列的可重写(override)函数供我们使用,其中的Awake与Start两个函数作为初始化与设置之用,几乎在每个脚本中都要用到。因此,正确的把握这两个函数的调用时机,就能让我们在程序开发过程中避免一些错误,提高开发效率。比较懒,所以就没有上图,欢迎大家的批评指正: )

Awake函数

首先,我们来看unity的参考手册中对Awake函数的一些说明情况:

  1. 如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数不会执行;反之,如果游戏对象的初始状态为开启状态,那么Awake函数会执行。并且,值得注意的一点是,Awake函数的执行与否与脚本实例的状态(启用或禁用)并没有关系,而是与脚本实例所绑定的游戏对象的状态有关。

  2. 在不切换场景的前提下,原本处于关闭状态的游戏对象,当它被首次开启时,Awake函数会执行,并且是只在首次开启时才会执行;而已经开启(激活)的游戏对象(Awake函数已经执行过一次),将它关闭后再次开启,Awake函数不会再次执行。看来这是对应了手册中说明的在脚本实例的整个生命周期中仅执行一次的情况。

  3. 如果重新加载场景,那么场景内Awake函数的执行情况重新遵循上述两点。

Start函数

还是先看参考手册中对Start函数的一些说明情况:
当Update函数第一次被调用前会调用Start函数;Start函数只在脚本实例被启用时才会执行;Start函数总是在Awake函数之后执行。在此基础之上,自己的测试总结如下 (没有特殊说明,均为在不切换场景的前提下):

  1. 如果游戏对象被关闭,那么Start函数不会执行。想一想这是理所当然的,游戏对象关闭了,脚本实例不会被加载,Awake函数不会执行,Start函数不会执行,Update函数等也不会执行。
  2. 如果游戏对象开启了,对象上绑定的脚本实例被禁用了,那么Start函数不会执行。这是Start函数的特点,只有在脚本实例被启用时它才会执行,这个说明中有提到。注意,这与Awake函数是有区别的。
  3. 如果游戏对象开启了,对象上绑定的脚本实例也开启了,那么Start函数会执行。并且Start函数只会在脚本实例首次被开启时才会执行。如果是已经开启过的脚本实例被关闭后再次开启,那么Start函数不会再次执行。
  4. 如果重新加载场景,那么场景内Start函数的执行情况重新遵循上述三点。

除此之外,还有对Awake函数和Start函数都比较重要的一点,那就是当游戏对象之间存在父子关系时(不论层级的多少)。这时,父游戏对象的状态(开启或关闭)完全决定了子游戏对象上的脚本函数的执行情况。总的来说就是,只有在父游戏对象被开启的状态下,程序才会考虑是否调用子游戏对象上的脚本函数(Awake与Start等)。自上而下,以此类推。

最后,自己对于Awake与Start函数的使用,一般都是在Awake函数中获取游戏对象或者脚本实例的信息,然后在Start函数中进行一些获取之后的初始化设置。具体情况,还要根据需求灵活变化。

Unity3D脚本中的Awake()和Start()的本质区别

Awake()是在脚本对象实例化时被调用的,而Start()是在对象的第一帧时被调用的,而且是在Update()之前。...
  • Neil3D
  • Neil3D
  • 2015年02月17日 11:10
  • 16822

[Unity3D]脚本中Start()和Awake()的区别

学习Unity脚本推荐:Unity3D官网索引 Unity3D初学者经常把Awake和Start混淆。 简单说明一下,Awake在MonoBehavior创建后就立刻调用,Start将...

Unity3D脚本中Start()和Awake()的区别

Unity3D初学者经常把Awake和Start混淆。 简单说明一下,Awake在MonoBehavior创建后就立刻调用,Start将在MonoBehavior创建后在该帧Update之前,在该M...

一张图说明Unity3d各种update的区别_包括Awake() Start()

其实想好想很多话想说,例如: “Awake在MonoBehavior创建后就立刻调用,Start将在MonoBehavior创建后在该帧Update之前,在该Monobehavior.enabled...
  • avi9111
  • avi9111
  • 2017年04月22日 13:23
  • 1210

Unity3d中 Awake 和 Start的区别

在Unity3d游戏程序运行时所有附加到游戏对象上的脚本组件都会运行, Awake方法和Start方法都只会运行一次,多用于数据初始化。 这两个方法的执行顺序是: 先执行Awake方法,再执行Star...

Unity3d中关于Awake()、Start()、OnEnable()等的执行顺序关系

最近在面试中遇到这样的问题,没有能够很好的回答,回来后经过试验和查验资料,发现一篇文章讲解的比较完整,直接搬过来翻译一下吧 原文地址:http://answers.unity3d.com/q...

Unity中Awake与Start函数的区别

在Unity中编写脚本时,有一系列的可重写(override)函数供我们使用,其中的Awake与Start两个函数作为初始化与设置之用,几乎在每个脚本中都要用到。因此,正确的把握这两个函数的调用时机,...

[Unity3D]脚本中Start()和Awake()的区别

Unity3D初学者经常把Awake和Start混淆。 简单说明一下,Awake在MonoBehavior创建后就立刻调用,Start将在MonoBehavior创建后在该帧Update之前,在...

【Unity3D自学记录】脚本中Start()和Awake()的区别

Unity3D初学者经常把Awake和Start混淆。 简单说明一下,Awake在MonoBehavior创建后就立刻调用,Start将在MonoBehavior创建后在该帧Update之前,在...
  • hackdjh
  • hackdjh
  • 2014年06月24日 13:07
  • 608

Unity3D脚本中Start()和Awake()的区别对比分析

欢迎来到unity学习、unity培训、unity企业培训教育专区,这里有很多U3D资源、U3D培训视频、U3D教程、U3D常见问题、U3D项目源码,我们致力于打造业内unity3d培训、学习第一品牌...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Awake与Start函数的区别详解
举报原因:
原因补充:

(最多只允许输入30个字)