UnityManualLearn#01 | 看一看Unity3D内核脚本生命周期

在Unity脚本中,有一些事件函数会在脚本执行的时候按特定的顺序执行。Unity手册里面就介绍了Unity事件函数生命周期。

0×01 场景第一次加载时

当场景开始运行时,这些方法函数将会被执行。

  • Awake:此方法函数会在任何其他脚本方法被调用之前调用,以及会在预制体实例化之后调用。
  • OnEnable:(仅在物体对象处于活动状态时调用)在启用对象后会立即调用此方法函数。比如当创建一个MonoBehaviour实例时,或脚本被加载,带有脚本组件的物体被实例化时。
  • OnLevelWasloaded:执行此方法函数以通知游戏已加载新的级别。

注意:对于当前场景中的所有物体,所有脚本的Awake和OnEnable方法函数都会比Start,Update方法函数优先执行。

0×02 编辑

  • Reset:使用此方法函数会重置调用初始化脚本的属性。

0×03 运行第一帧之前

  • Start:脚本实例化之后启用,在第一帧更新之前调用。

注意:对于场景中的对象,将在Update之前的所有脚本上调用Start函数。

0×04 运行帧间

  • OnApplicationPause:在检测到游戏暂停时末尾帧调用。在调用OnApplicationPause之后会发出一个额外的帧数,以允许游戏显示暂停状态的图形界面。

0×05 更新

当你控制游戏逻辑和交互,动画,相机位置等,可以使用几个不同的事件函数。经常使用的Update方法可以满足大部分的任务,当然也可以使用其他函数。

  • FixedUpdate:FixUpdate通常比Update更频繁的被调用。如果帧率较低时,可以每帧调用多次;如果帧率较高,则可能不会在帧之间调用帧速率。比较适用于物理计算和更新的部分脚本内容。在FixedUpdate中使用计算时,不需要Time.deltaTime乘以操作的值。是因为它的调用与帧速率无关。
  • Update:每帧调用一次。
  • LateUpdate:在Update之后每帧调用一次。LateUpdate开始执行时,Update中的所有计算都讲完成。LateUpdate常见的用途是相机的操作。如果您让角色在Update中移动并且进行位置转换,则可以选择在LateUpdate中执行所有相机移动和旋转的计算,这讲确保角色在摄像机跟踪其位置之前完全移动。

0×06 渲染

  • OnPreCull:在相机渲染之前调用。确定相机可以看到那些物体。OnPreCull在剔除发生之前被调用。
  • OnBecameVisible/OnBecameInvisible:当任何相机变为可见或不可见时调用。
  • OnWillRenderObject:如果对象可见,则为每个相机调用一次。
  • OnPreRender:在相机开始渲染场景之前调用。
  • OnRenderObject:完成所有常规场景渲染后调用。此时可以使用GL类或Graphics.DrawMeshNow绘制自定义几何图形。
  • OnPostRender:在相机完成渲染场景后调用。
  • OnRenderImage:场景渲染完成后调用以允许对图像进行后期处理,请参阅Unity手册后期处理效果
  • OnGUI:响应GUI事件,每帧调用多次。Layout和Repaint事件首先被处理,然后是每个输入事件的布局和键盘/鼠标事件。
  • OnDrawGizmos用于在场景视图中绘制Gizmos以用于可视化目的。

0×07 协同程序

正常的协程方法更新在Update函数返回后运行。协程是一个函数,可以暂停执行(yield),直到给定的YieldInstruction完成。协程的不同用途为:

  • yield:的协同程序将继续更新所有功能都被称为下一帧之后。
  • yield WaitForSeconds:在指定的时间延迟后继续。
  • yield WaitForFixedUpdate:在所有脚本上调用了所有FixedUpdate后继续
  • yield WWW:在WWW下载完成后继续。
  • yield StartCoroutine:链接协程,并等待调用的协同程序先完成。

0×08 物体销毁

  • OnDestroy:在对象存在的最后一帧更新之后调用此函数(该对象可能在响应Object.Destroy时或在场景关闭时被销毁)。

0×09 退出时

这些函数在场景中的所有活动对象上被调用:

  • OnApplicationQuit:在应用程序退出前,所有游戏对象都会调用该函数。在编辑器中,当用户停止播放模式时会调用它。
  • OnDisable:当行为被禁用或不活动时,此函数被调用。
如果有十分,这篇文章你愿意给几分?
0%