Unity3D ----- 生命周期
这是一篇关于Awake/OnEnable/Start三个函数的详细执行顺序的博客。超级赞!http://www.cnblogs.com/xpvincent/p/3178042.html
unity的生命周期就是上图。途中也介绍了每个函数的调用。
这里详细说下会经常用到的方法,和一些有疑惑的方法。
1.Awake(初始化函数,在游戏开始时系统自动调用),一般用来创建变量。
2.Start(初始化函数,待Awake函数运行完毕Update函数运行前调用),一般用来给变量赋值。
总结来说,在处理对象的reference设置等事情时,放在Awake()中,然后将这些reference的Object赋值设置放在Start()中来完成。
【引用】
当我们为MonoBehavior定义了[ExecuteInEditMode]后,我们需要关心Awake和Start在编辑器中的执行状况。
[ExecuteInEditMode]属性表示在编辑模式下运行。
1、当该MonoBehavior在编辑器中被赋于给GameObject的时候,Awake, Start 将被执行。2、当Play按钮被按下游戏开始以后,Awake, Start 将被执行。
3、当Play按钮停止后,Awake, Start将再次被执行。
4、当在编辑器中打开包含有该MonoBehavior的场景的时候,Awake, Start将被执行。
Awake()
当一个脚本被载入是调用,在整个生命周期它仅被调用一次。
Awake用于在游戏开始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在所有对象被初始化之后调用,所以你可以安全的与其他对象对话或用诸如 GameObject.FindWithTag 这样的函数搜索它们。每个游戏物体上的Awke以随机的顺序被调用。因此,你应该用Awake来设置脚本间的引用,并用Start来传递信息。Awake总是在Start之前被调用。它不能用来执行协同程序。 —— 来自圣典
Start()
Start仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中只被调用一次。它和Awake的不同是Start只在脚本实例被启用时调用。
你可以按需调整延迟初始化代码。Awake总是在Start之前执行。这允许你协调初始化顺序。 —— 来自圣典