由来: 在匆匆找Unity工作的时候, 考官问我一般写初始化值的时候, 你写在那个方法里面!
我心中一直出现awake和Start,于是我想说awake方法. 但是我不会读。。。。我问他能不能写出来
他还是答应了我的要求,我就快乐的写在纸上给了他。 经过一轮探讨他就叫我回家等通知吧。
前提: 先不谈论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()里面, 需要调用其他组件来初始化或完成某行为,应该写在Start()
几种属性初始化选择:
属性 = new 类名(); 经常干
构造方法 没看过这样干的
awake()方法 经常干
start()方法 经常干