关于游戏中游戏对象是否处于active或者脚本是否为enabled 时 Start和Awake函数的调用
基本上可以有四种情况:
1.game object 为active 但是脚本为disabled
此时当对象被创建时只有Awake函数会被立刻调用,OnEnable和 Start 会在Enabled脚本后调用。
2.game object 为deactive但是脚本为enabled
此时当对象被创建时不会有函数被调用,当active物体之后会按照Awake OnEnable Start 顺序调用函数。
3.game object 为avtive且脚本为enabled
此时当对象被创建时会按照Awake OnEnable Start顺序执行函数。
4.game object 为deactive且脚本为disabled
此时创建对象不会有函数调用,当active物体之后Awake函数会立即调用,enabled脚本后OnEnable和Start会接着被调用。
需要注意的是Awake和Start在一个游戏物体的生命周期中只调用一次,但是OnEnable会在每次激活脚本的时候再次执行。
如在游戏中先创建一个物体,激活其脚本,则此时Awake OnEnable Start 会调用,将一个脚本的enabled设为false则其OnDisable会被调用
,再次激活时OnEnable又会被调用可Awake 和 Start 则不会再调用。注意将一个游戏对象SetActive(false)时其绑定的脚本以及子脚本中的OnDisable也
会被调用,SetActive(true)时会调用OnEnable。这可以解释为什么在为一个游戏对象订阅和移除事件委托时要分别在其OnEnable和 OnDisable OnDestroy中编写代码了
, 以前还真没看懂这点。
demo.unitypackage
基本上可以有四种情况:
1.game object 为active 但是脚本为disabled
此时当对象被创建时只有Awake函数会被立刻调用,OnEnable和 Start 会在Enabled脚本后调用。
2.game object 为deactive但是脚本为enabled
此时当对象被创建时不会有函数被调用,当active物体之后会按照Awake OnEnable Start 顺序调用函数。
3.game object 为avtive且脚本为enabled
此时当对象被创建时会按照Awake OnEnable Start顺序执行函数。
4.game object 为deactive且脚本为disabled
此时创建对象不会有函数调用,当active物体之后Awake函数会立即调用,enabled脚本后OnEnable和Start会接着被调用。
需要注意的是Awake和Start在一个游戏物体的生命周期中只调用一次,但是OnEnable会在每次激活脚本的时候再次执行。
如在游戏中先创建一个物体,激活其脚本,则此时Awake OnEnable Start 会调用,将一个脚本的enabled设为false则其OnDisable会被调用
,再次激活时OnEnable又会被调用可Awake 和 Start 则不会再调用。注意将一个游戏对象SetActive(false)时其绑定的脚本以及子脚本中的OnDisable也
会被调用,SetActive(true)时会调用OnEnable。这可以解释为什么在为一个游戏对象订阅和移除事件委托时要分别在其OnEnable和 OnDisable OnDestroy中编写代码了
, 以前还真没看懂这点。
demo.unitypackage