在中国使用unity引擎的人很多,因为它上手起来很简单。
但是也正是因为简单,好多人就下意识地忽略掉了它一些很基础的东西。
前几天我就因为unity的生命周期吃点亏,所以我现在想仔细探讨下。
在开始之前,我先贴一张unity官方的图。在这张图,大家会更直观地认清生命周期。
在这里我并不是讨论生命周期排序问题,我说的就是执行顺序问题。
大家都应该用过对象池,对象池的流程我并不需要多说。
当一个对象回收之后,我们需要把该对象setActive(false),进行隐藏,等之后需要的时候再**。
现在我创建个脚本
分别Awake
Start,
Onenable
update
OnDisable
OnDestroy
然后我再点击运行
当我取消脚本上的“对号”之后,之后调用OnDisable,并没有调用OnDestroy,当我删除对象之后才调用OnDestroy。
而且
当我从新**之后,只有调用OnEnable和Update,并没有调用Awake和start,这就意味着当重新**的时候你不可以从新用start和awake对某些变量赋值。
打个比方就是你在start中,int a=8,之后a在update或者在其他函数中改变,变成7,当你从新启用时,a=7,。
这个问题可大可小,因为要是从对象池中**对象的话,难免要对对象进行赋值,如果这个变量在之后改变的话,就不会再start中进行重置。