选择awake和Start的初始化区别

由来: 在匆匆找Unity工作的时候, 考官问我一般写初始化值的时候, 你写在那个方法里面!
我心中一直出现awake和Start,于是我想说awake方法. 但是我不会读。。。。我问他能不能写出来
他还是答应了我的要求,我就快乐的写在纸上给了他。 经过一轮探讨他就叫我回家等通知吧。

ND@Q@[PDZ)0R110V19O9G{9

 

awake 和 start 区别

awake -》 start 的执行顺序

awake: 是物体创建出来就会执行(如果当前游戏物体被禁用,是不会执行的)

start: 函数只在脚本实例被启用时才会执行(如果当前组件被禁用的,是不会执行的)

awake 和 start 在整个生命周期中只会执行一次

可以在awake方法中,用代码控制让start不再执行。

public void awake()

{

     this.Enable = false;

}

============================================================

前提: 先不谈论awake方法可以调解他的执行时间!

GameObject是一个树形结构,从上到下, 先从最根的组件awake方法以此向下执行,之后同理在执行Start方法.并不是执行完一个Awake,Start 在执行另一个组件的Awake,Start方法

结论:
    1. 1个GameObject不需要其他GameObject上面的组件属性来初始化, 你选择Awake 或者 Start 都没问题.
        (首选Awake,在Awake()中写上这句代码 组件.Enable = false;  Start就能暂停了)
   
    2. 两个Gameobject上的组件(A,B)  A是B的父节点,A B是组件, A需要引用B的属性来初始化
        A在Awake初始化,B在Awake初始化.  报错
        A在Start初始化,B在Start初始化.        报错
        A在Start初始化,B在Awake初始化.     成功

       
    3. 组件给自己属性初始化,一定在Awake()里面, 需要调用其他子节点组件(A)来初始化(A的初始化是写在awake中)或完成某行为,应该写在Start()
   
   
几种属性初始化选择:
    属性 = new 类名();            经常干
    构造方法                          没看过这样干的
    awake()方法                      经常干
    start()方法                         经常干

你可能感兴趣的:(start)