最近做游戏时遇到了一些问题,经过查询后得知是对Unity生命周期的理解不够到位造成的,特意对Unity的脚本声明周期进行了认真地单项学习,经过学习后也对声明周期有了自己浅显的认识。
首先上一张大家都无比熟悉的一张图
面对这张图的理解每个人可能都是大同小异,首先这是脚本代码的执行编译顺序:
Awake ->OnEable-> Start -> -> FixedUpdate-> Update -> LateUpdate ->OnGUI ->Reset -> OnDisable ->OnDestroy
看起来很简单明了,但随后一个小小的疑问产生了:什么是Awake什么是Enable 他和Start到底又是怎么样的关系,他们不是都是刚开始的时候进行调用吗,这些疑问一直围绕着我们虽然也不会对我们代码编写产生很大的影响,但是当我们万一遇到了因为生命周期理解不足所导致Debug报错真还是一头雾水。
先说Awake,这是在脚本编译中最先做的事,只要你在物体上挂载了脚本,那么脚本编译的第一件事就是运行Awake,所以Awake本身并没有复杂的含义,他仅仅是脚本实例化的第一件事而已,如果我们没有在脚本中Awake声明方法或者赋值变量那么我们就可以当他是不存在。
但是!!!