Unity 事件函数的执行顺序

简介: 在 Unity 脚本中,有许多事件函数在脚本执行时按预定的顺序执行。这个执行顺序如下所述:首个场景加载这些函数在场景开始时调用(对于场景中的每个对象调用一次)。Awake:在所有 Start 函数之前,以及 prefab 实例化之后调用。

在 Unity 脚本中,有许多事件函数在脚本执行时按预定的顺序执行。这个执行顺序如下所述:

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

Awake:在所有 Start 函数之前,以及 prefab 实例化之后调用。(如果一个 GameObject 在启动期间处于非活动状态,则在激活之前不会调用它。)
OnEnable(仅在对象处于活动状态时调用):在对象启用后调用。这发生在创建 MonoBehaviour 实例时,例如加载关卡或实例化带有脚本组件的 GameObject 时。
OnLevelWasLoaded:执行此函数是为了通知游戏已加载新关卡。
注意,对于添加到场景中的对象,所有脚本的 Awake 和 OnEnable 函数都将在任何一个脚本调用 Start、Update 等之前调用。当然,对于在游戏过程中已被实例化的对象,这些函数并不能强制执行。

编辑器
Reset:当脚本的属性首次附加到对象时,以及使用 Reset 命令时,调用该函数来初始化脚本的属性。
第一帧之前
Start:只有在脚本实例被启用时,才会在第一个帧更新之前调用 Start。
对于添加到场景中的对象,所有脚本的 Start 函数在 Update 等函数之前调用。当然,对于在游戏过程中已被实例化的对象,这个函数并不能强制执行。

帧间
OnApplicationPause:在检测到暂停的帧的末尾调用,在正常帧更新之间有效。在调用 OnApplicationPause之后,将会发出一个额外的帧,以允许游戏显示暂停状态的图形。
更新顺序
当在跟踪游戏逻辑和互动,动画,摄像机位置等时,可以使用一些不同的事件。常见的模式是在 Update 函数中执行大多数任务,但是也存在其他函数供调用。

FixedUpdate:FixedUpdate 通常比 Update 更频繁地被调用。如果帧率很低,它可以在每帧中调用多次;如果帧率很高,它也可能根本不会在帧之间被调用。所有物理计算和更新在 FixedUpdate 调用后立即发生。在 FixedUpdate 中应用移动计算时,不需要将值乘以 Time.deltaTime。这是因为 FixedUpdate 是在一个可靠的定时器上调用的,与帧率无关。
Update:每帧调用一次 Update。它是帧更新的主要主力函数。
LateUpdate:在 Update 调用完成后,每帧调用一次 LateUpdate。在 Update 中执行的任何计算都将在 LateUpdate 开始之前完成。LateUpdate 的一个常用功能是第三人称视角跟随相机。如果角色在 Update 中发生移动和旋转,那么相机的移动和旋转就应该在 LateUpdate 中发生。这将确保角色在摄像机跟踪其位置之前已经移动完成。
渲染
OnPreCull:在摄像机对场景进行剔除前被调用。剔除动作决定了哪些对象对相机可见。OnPreCull 在进行剔除动作之前调用。
OnBecameVisible/OnBecameInvisible:当对象对任意相机可见/不可见时调用。
OnWillRenderObject:如果对象可见,则每个相机调用一次。
OnPreRender:在相机开始渲染场景之前调用。
OnRenderObject:在所有常规场景渲染完成后调用。此时可以使用 GL 类或 Graphics.DrawMeshNow 来绘制自定义几何图形。
OnPostRender:在相机完成对场景的渲染后调用。
OnRenderImage:在场景渲染完成后调用,允许对图像进行后处理。
OnGUI:响应 GUI 事件,每帧调用多次。首先处理布局和重绘事件,然后为每个输入事件处理布局和键盘/鼠标事件。
OnDrawGizmos:用于在 scene 视图中绘制 Gizmo。
协程
一般的协程更新在 Update 函数返回后运行。协程是一个函数,它可以暂停执行(yield),直到给定的 YieldInstruction 完成。协程的不同用法:

yield:下一帧的所有 Update 函数被调用后,协程继续。
yield WaitForSeconds:延时特定时间后,在当前帧所有 Update 函数被调用之后继续。
yield WaitForFixedUpdate:在所有脚本的 FixedUpdate 被调用后继续。
yield WWW:在一个 WWW 下载完成后继续。
yield StartCoroutine:将协程链起来,并等待 MyFunc协程首先完成。
对象被销毁
OnDestroy:在对象存在的最后一帧的所有更新之后调用(对象可能在会响应 Object.Destroy 时或在场景结束时被销毁)。
退出
这些函数会调用场景中的所有活动对象:

OnApplicationQuit:在应用程序退出之前,将对所有游戏对象调用此函数。在编辑器中,当用户停止播放模式时调用它。
OnDisable:当行为被禁用或不活动时,将调用此函数。
更多unity2018的功能介绍请到paws3d爪爪学院查找。

相关文章
|
4月前
|
API 开发工具 图形学
PicoVR Unity SDK⭐️五、常用API接口函数一览
PicoVR Unity SDK⭐️五、常用API接口函数一览
|
4月前
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
3月前
|
图形学 开发者 UED
Unity游戏开发必备技巧:深度解析事件系统运用之道,从生命周期回调到自定义事件,打造高效逻辑与流畅交互的全方位指南
【8月更文挑战第31天】在游戏开发中,事件系统是连接游戏逻辑与用户交互的关键。Unity提供了多种机制处理事件,如MonoBehaviour生命周期回调、事件系统组件及自定义事件。本文介绍如何有效利用这些机制,包括创建自定义事件和使用Unity内置事件系统提升游戏体验。通过合理安排代码执行时机,如在Awake、Start等方法中初始化组件,以及使用委托和事件处理复杂逻辑,可以使游戏更加高效且逻辑清晰。掌握这些技巧有助于开发者更好地应对游戏开发挑战。
134 0
|
4月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
84 0
|
4月前
|
图形学
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件
|
4月前
|
图形学
|
6月前
|
安全 图形学
【unity实战】事件(Event)的基本实战使用
【unity实战】事件(Event)的基本实战使用
197 1
|
6月前
|
存储 图形学
【unity小技巧】unity事件系统创建通用的对象交互的功能
【unity小技巧】unity事件系统创建通用的对象交互的功能
61 0
|
6月前
|
图形学
【unity实战】基于权重的随机事件(附项目源码)
【unity实战】基于权重的随机事件(附项目源码)
43 0
|
图形学
Unity 事件系统
Unity 事件系统
108 0