Advertisement

siki Unity - A计划 视频

阅读量:

事件函数的执行顺序

已入坑unity课,底下评论 在 Unity 脚本中,有许多事件函数在脚本执行时按预定顺序执行。该执行顺序描述如下:

编辑

  • 重置: 当脚本第一次附加到对象时以及 使用 重置 命令时,都会调用重置以初始化脚本的属性。

第一个场景加载

这些函数在场景开始时被调用(场景中的每个对象一次)。

  • Awake: 这个函数总是在任何 Start 函数之前调用,并且在一个 prefab 被实例化之后。(如果游戏对象在启动期间处于非活动状态,则在激活之前不会调用 Awake。)
  • OnEnable:( 仅在对象处于活动状态时调用):此函数在对象启用后立即调用。这会在创建 MonoBehaviour 实例时发生,例如在加载关卡或实例化带有脚本组件的 GameObject 时。
  • OnLevelWasLoaded: 执行此函数以通知游戏已加载新关卡。

请注意,对于添加到场景中的对象, 所有 脚本的 Awake 和 OnEnable 函数将在为其中任何一个调用 Start、Update 等之前调用。自然,在游戏过程中实例化对象时无法强制执行此操作。

第一帧更新前

  • Start: 仅当启用脚本实例时,才会在第一帧更新之前调用 Start。

对于添加到场景中的对象,将在所有脚本上调用 Start 函数,然后再为它们中的任何一个调用 Update 等。自然,在游戏过程中实例化对象时无法强制执行此操作。

在帧之间

  • OnApplicationPause: 在检测到暂停的帧结束时调用,在正常帧更新之间有效。调用OnApplicationPause 后将发出一帧额外的帧, 以允许游戏显示指示暂停状态的图形。

更新订单

当您跟踪游戏逻辑和交互、动画、相机位置等时,您可以使用一些不同的事件。常见的模式是在 Update 函数中执行大多数任务,但您也可以使用其他函数。

FixedUpdate: FixedUpdate通常比****Update 更频繁地调用 。如果帧速率较低,则每帧可以调用多次,如果帧速率较高,则可能根本不会在帧之间调用。所有物理计算和更新都在 FixedUpdate 之后立即发生。在 FixedUpdate 中应用移动计算时,您不需要将值乘以 Time.deltaTime 。这是因为 FixedUpdate 是在一个可靠的计时器上调用的,与帧速率无关。

更新: 每帧调用一次更新。 它是帧更新的主要主力功能。

LateUpdate: LateUpdate在****更新 完成 后每帧调用一次 。当LateUpdate 开始时,在Update 中执行的任何计算都 将完成 。LateUpdate 的常见用途 是跟随第三人称相机。如果您让角色在 Update中移动和转动,您可以在****LateUpdate 中执行所有摄像机移动和旋转计算 。这将确保角色在相机跟踪其位置之前已完全移动。

渲染

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

协程

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

  • yield 在下一帧调用了所有 Update 函数后,协程将继续。
  • yield WaitForSeconds 在指定的时间延迟后继续,在为帧调用了所有更新函数之后
  • yield WaitForFixedUpdate 在所有脚本上调用所有 FixedUpdate 后继续
  • yield WWW 在 WWW 下载完成后继续。
  • yield StartCoroutine 链接协程,并等待 MyFunc 协程首先完成。

当对象被破坏时

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

退出时

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

  • OnApplicationQuit: 在应用程序退出之前,在所有游戏对象上调用此函数。在编辑器中,当用户停止播放模式时调用它。
  • OnDisable: 当行为被禁用或不活动时调用此函数。

全部评论 (0)

还没有任何评论哟~