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