[Unity3D]Start和Awake方法的区别

Start和Awake方法的区别和使用

1. Awake

Awake is called when the script instance is being loaded.
Awake方法在脚本实例正在被加载的时候调用

  • Awake方法在脚本的生命周期中只调用一次
  • Awake方法会在所有object都初始化后调用,所以不用担心object还没有加载出来,GameObject的find方法可以找到引用
  • Awake方法的调用顺序在object之间时随机的
  • 当所有对象的Awake方法都调用完成后,才会执行第一个Start方法
  • Awake方法就像构造函数一样
  • Awake方法不论脚本是否启用,都会调用

2. Start

Start is called on the frame when a script is enabled just before any of the Update methods is called the first time.
脚本被启用的时候,Start方法被调用,且是在Update方法之前被调用

  • Start方法在脚本生命周期中只调用一次
  • Start方法在脚本启用时才会调用,也就是启用的第一次才调用

3. OnEnable

This function is called when the object becomes enabled and active.
这个方法在对象被激活和启用时调用

  • OnEnable方法时在Awake之后Start之前调用,和他们不同的是,此方法可以调用多次。

4. Awake和Start方法的比较

大部分情况下,两个方法都可以用来初始化,但是当A的初始化要用到B的初始化时,我们可以把B的初始化放在Awake中,然后A在Start中使用B就没有问题了。
这是因为所有的Start方法的执行顺序都是随机的,假如A在Start中初始化了某个值,而B要获取这个值,而我们不知道哪个Start会先执行,可能B先执行,所以这样可能就报错了。
如果我们必须规定脚本的执行顺寻,我们可以按照下图进行设定。
[Unity3D]Start和Awake方法的区别_第1张图片

你可能感兴趣的:(Unity学习)