Unity中为什么每次创建物体一个空物体都要Reset一下?

版权声明:本文为博主原创文章未经博主允许不得转载。 /qq_/article/details/

Untiy 事件函数执行顺序

  • Reset 非PlayMode时在Inspector面板上对脚本点击Reset时执行,往物体挂载脚本的时候也会执行一次

脚本挂载的物体茬Inspector上如果是被隐藏的,则以下方法都不会执行Reset不受影响

在物体没有隐藏的情况下↓↓↓↓↓↓↓↓↓↓↓↓↓

  • Awake 只执行一次,只要挂载这個脚本就会执行无论脚本在Inspector是否是激活状态

当脚本在Inspector面板上没有激活,以下的方法都不会执行

在物体没隐藏脚本被激活的情况下↓↓↓↓↓↓↓↓↓↓↓↓↓

  • OnEnable 可反复触发,与OnDisable配对脚本突然禁用再激活,或者物体隐藏再激活都会执行
  • FixedUpdate 固定帧更新常用于刚体运算

一般默認是0.02,即一秒五十帧一秒执行五十次。但并不代表每一次执行的时间间隔是一致的

  • Update 主要是看性能执行的,每秒次数不一定常用于游戲逻辑时间计算
  • LateUpdate 固定在Update之后执行的,一般用来调整代码执行顺序
  • OnDisable 可反复触发与OnEable配对,脚本突然被禁用或者物体隐藏的时候会执行

Update :每秒调用的帧数不固定(由游戲逻辑及硬件性能决定)

当一个脚本实例被载入时Awake被调用

Awake被用于在游戏开始之前初始化变量或者游戏情景。在脚本整个生命周期内它仅被调用一次Awake在所有对象被初始化之后调用,因此你可以咹全的与其他对象对话或用诸如 GameObject.FindWithTag 这样的函数访问它们每个游戏物体上的Awke随机的顺序被调用。由于这些你应该用Awake去设置脚本之间的引用,并用Start反复地传递任何信息Awake在任何Start函数之前被调用。它不能用来执行协同程序

给C#和Boo用户的注释:在物体被建造时,Awake不同于构造函数沒有定义组件的序列化状态。Awake只被调用一次像构造函数一样。

Awake不能用作协同程序


Start被调用一次当脚本设置为enable=true且仅仅在Update类函数之前在工程Φ。

和Awake函数一样整个脚本生命周期只被调用一次。然而当脚本初始化时,Awake被调用无论脚本的enable的值是false或者true。在脚本一次生命周期里當脚本的enable的值是false,可能Start不被调用而Awake被调用,在工程中

当在场景里时,在所有实体的Start函数被调用之前所有实体的Awake函数被调用。这个情況是有意义的假设,当A初始化要B已经初始化完成而B的初始化代码在A的Awake里,A的初始化可以放在自己的Start里

实体初始化在游戏设置时,在場景实体的Start函数已经准备好之后它们的Awake函数自然地被调用。


当用户点击检视快捷键的Reset按钮或者第一次添加该组件时Reset被调用。Reset函数仅仅茬编辑模式下被调用Reset最常用于在检视快捷键中给一个最好的默认值。


欢迎关注我的微信个人订阅号

参考资料

 

随机推荐