Unity事件函数的执行顺序

这篇具有很好参考价值的文章主要介绍了Unity事件函数的执行顺序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

事件函数的执行顺序


脚本生命周期流程图

Unity事件函数的执行顺序

场景加载时

这些函数在场景开始时被调用(场景中的每个对象一次)
  • Awake:此函数总是在任何 Start 函数之前以及在预制件被实例化之后调用(如果 GameObject 在启动期间处于非活动状态,则在激活之前不会调用 Awake。)

  • OnEnable:(仅在对象处于活动状态时调用):此函数在对象启用后立即调用。 这在创建 MonoBehaviour 实例时发生,例如加载关卡或 GameObject的脚本组件被实例化时。


Editor

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

  • OnValidate:每当设置脚本的属性时调用 OnValidate,包括反序列化对象时,这可能在不同时间发生,例如在编辑器中打开场景时和域重新加载后。


Before the first frame update

  • Start:只有在启用脚本实例的情况下,才会在第一帧更新之前调用 Start。

Update Order

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

  • Update:每帧调用一次。

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


Animation update loop

  • OnStateMachineEnter:在状态机更新步骤中,当控制器的状态机进行一个流经 Entry 状态的转换时,在第一个更新帧上调用此回调。 不会调用它来转换到 StateMachine 子状态。

  • OnStateMachineExit:在状态机更新步骤中,当控制器的状态机进行流经退出状态的转换时,将在最后一个更新帧上调用此回调。 不会调用它来转换到 StateMachine 子状态。

  • Fire Animation Events:从上次更新时间和当前更新时间之间采样的所有剪辑调用所有动画事件。

  • StateMachineBehaviour (OnStateEnter/OnStateUpdate/OnStateExit):一个层最多可以有3个活动状态:当前状态、中断状态和下一状态。 使用定义 OnStateEnter、OnStateUpdate 或 OnStateExit 回调的 StateMachineBehaviour 组件为每个活动状态调用此函数。

  • OnAnimatorMove:每个更新帧,为每个 Animator 组件调用一次,修改Root Motion

  • StateMachineBehaviour(OnStateMove):在每个活动状态上使用定义此回调的 StateMachineBehaviour 调用。

  • OnAnimatorIK:设置动画 IK。 对于启用 IK 通道的每个 Animator Controller 层调用一次。

  • StateMachineBehaviour(OnStateIK):在启用 IK 通道的层上定义此回调的 StateMachineBehaviour 组件在每个活动状态上调用。

  • WriteProperties:将所有其他动画属性从主线程写入场景。


Rendering

  • OnPreCull:在相机剔除场景之前调用。剔除确定哪些对象对相机可见。 OnPreCull 在剔除发生之前被调用。

  • OnBecameVisible/OnBecameInvisible:当对象对任何相机可见/不可见时调用。

  • OnWillRenderObject:如果对象可见,则为每个摄像机调用一次。

  • OnPreRender:在相机开始渲染场景之前调用。

  • OnRenderObject:在所有常规场景渲染完成后调用。此时您可以使用 GL 类或 Graphics.DrawMeshNow 来绘制自定义几何图形。

  • OnPostRender:在相机完成渲染场景后调用。

  • OnRenderImage:场景渲染完成后调用,允许后期处理图像。

  • OnGUI:每帧调用多次以响应 GUI 事件。首先处理 Layout 和 Repaint 事件,然后是每个输入事件的 Layout 和键盘/鼠标事件。

  • OnDrawGizmos 用于绘制 Gizmos在场景视图中出于可视化目的。

注意:这些回调仅适用于内置渲染管线。


Coroutines

正常的协程更新在 Update 函数返回后运行。 协程是一个可以暂停执行(yield)直到给定的 YieldInstruction 完成的函数。
  • yield 在下一帧调用所有 Update 函数后协程将继续。
  • yield WaitForSeconds 在为帧调用所有更新函数后,在指定的时间延迟后继续。
  • yield WaitForFixedUpdate 在所有脚本上调用所有 FixedUpdate 后继续。 如果协程在 FixedUpdate 之前产生,则它在当前帧的 FixedUpdate 之后恢复。
  • yield WWW 在 WWW 下载完成后继续。
  • yield StartCoroutine 链接协程,并等待 MyFunc 协程首先完成。

When the Object is destroyed

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

When quitting

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

OnApplicationQuit:此函数在应用程序退出之前在所有游戏对象上调用。 在编辑器中,当用户停止播放模式时调用它。

OnDisable:当行为被禁用或不活动时调用此函数。文章来源地址https://www.toymoban.com/news/detail-424213.html

到了这里,关于Unity事件函数的执行顺序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • unity如何手动更改脚本执行顺序

    在Unity中,脚本的执行顺序是由脚本的执行顺序属性决定的。默认情况下,Unity根据脚本在项目中的加载顺序来确定它们的执行顺序。然而,你可以手动更改脚本的执行顺序,以下是一种方法: 在Unity编辑器中,选择你想要更改执行顺序的脚本。 在Inspector面板中,找到脚本组

    2024年02月14日
    浏览(37)
  • Hive:聚合函数、GROUP BY、ORDER BY、LIMIT、执行顺序和JOIN、函数

    1.聚合函数 常见的聚合函数: Count、Sum、Max、Min和Avg 特点:不管原始数据多少条,聚合之后只有一条 Count(column)返回某列的行数,不包括NULL值 2.GROUP BY select中的字段要么是GROUP BY字段,要么是被聚合函数应用的字段 2.HAVING WHERE中无法出现聚合函数,所以有了HAVING WHERE是分组前

    2024年02月07日
    浏览(49)
  • 【Unity3D日常开发】Unity3D中实现不同脚本之间的执行顺序控制

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好,我是佛系工程师 ☆恬静的小魔龙☆ ,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 首先,来了解一下事件函数的执行顺序,下图是官方给的脚本中事件函数的执行顺序: 众所周知,U

    2024年02月02日
    浏览(58)
  • Unity中常见的脚本生命周期函数及顺序

    以下是Unity中常见的脚本生命周期函数的顺序: Awake():当对象被创建时调用,用于初始化对象的引用和状态。 OnEnable():在对象变为激活状态时调用,用于进行初始化操作。 Start():在 Awake 之后调用,用于在对象被启用前进行初始化操作。 FixedUpdate():固定的时间间隔(一般

    2024年02月06日
    浏览(43)
  • Unity MonoBehaviour事件函数的生命周期

    Unity运行时候的默认的几个函数的执行顺序: 首先是Awake,OnEnable,Start等,后面是FixUpdate Update 最后是OnDisable、OnDestroy

    2024年02月10日
    浏览(44)
  • 【Unity3D】Unity 脚本 ③ ( C# 脚本的执行入口函数 | 获取当前游戏物体及物体名称 | 获取游戏物体的 Transform 组件数据 | UnityEngine 命名空间简介 )

    在 C# 脚本中控制 游戏物体 GameObject 运动 , 要先获取该物体 , 然后 修改其 Transform 组件的属性 ; 在 游戏开始运行后 , 会自动执行 游戏物体 GameObject 上的 C# 组件代码 , 程序入口是 MonoBehaviour#Start() 函数 ; 在 C# 脚本中 , 主要的内容都在 Start() 函数 中实现 ; 在 C# 脚本中 , 游戏物体

    2023年04月12日
    浏览(89)
  • JavaScript 鼠标事件监听&&触发时机&&触发顺序

    有时间整理下鼠标的监听事件,目前汇总到的鼠标监听事件以下10个: 目录 1. click 2. dblclick 3.contextmenu 4.mousedown 5.mouseup 6.mouseenter 7.mouseleave 8.mouseover 9.mouseout 10.mousemove 先说下触发时机和作用键(左键、右键) 点击事件,只有左键生效 双击事件,只有左键生效 跟click事件对比

    2024年02月08日
    浏览(52)
  • SQL语句的执行顺序

    1 from                找表 2 on                   关联条件帅选 3 join                 关联表操作 4 where             条件筛选 5 group by         进行分组 6 avg,sum…      执行函数 7 having            分组后筛选 8 select           

    2024年02月10日
    浏览(46)
  • SQL 查询的执行顺序

    by emanjusaka from ​ https://www.emanjusaka.top/2023/09/sql-query-order 彼岸花开可奈何 本文欢迎分享与聚合,全文转载请留下原文地址。 了解 SQL 查询的执行顺序对我们解决一些问题很有帮助,有时我们可能会疑惑为什么不能对分组的结果进行筛选这样类似的问题?之前一直不是理解这个

    2024年02月10日
    浏览(49)
  • 线程按顺序循环执行

    假设有3个线程,依次打印A、B、C,按顺序循环打印100次。 这个其实是线程通信,如果只是按顺序执行,用只有一个线程的线程池,依次提交线程任务就行,但是这里还不是每个线程只执行一次,需要循环重复打印。 这里有两种处理方式,一种是搞个全局int变量,对线程数取

    2024年02月04日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包