Unity 事件函数的执行顺序

 脚本生命周期流程图

 

  • Awake:在所有 Start 函数之前,以及 prefab 实例化之后调用。(如果一个 GameObject 在启动期间处于非活动状态,则在激活之前不会调用它。)
  • OnEnable(仅在对象处于活动状态时调用):在对象启用后调用。这发生在创建 MonoBehaviour 实例时,例如加载关卡或实例化带有脚本组件的 GameObject 时。
  • OnLevelWasLoaded:执行此函数是为了通知游戏已加载新关卡。
  • Reset:当脚本的属性首次附加到对象时,以及使用 Reset 命令时,调用该函数来初始化脚本的属性。
  • Start:只有在脚本实例被启用时,才会在第一个帧更新之前调用 Start
  • OnApplicationPause:在检测到暂停的帧的末尾调用,在正常帧更新之间有效。在调用 OnApplicationPause之后,将会发出一个额外的帧,以允许游戏显示暂停状态的图形。
  • FixedUpdateFixedUpdate 通常比 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:当行为被禁用或不活动时,将调用此函数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity中,可以通过修改脚本的执行顺序来控制不同脚本之间的事件函数的调用顺序。有三种方法可以实现这个目的。 第一种方法是通过修改脚本的.cs.meta文件来控制脚本的执行顺序。在Unity编辑器中,每个脚本文件都对应着一个.cs.meta文件。你可以打开.cs.meta文件,并修改其中的"executionOrder"属性的值来改变脚本的执行顺序。较小的值表示较早执行,较大的值表示较晚执行。这种方法需要对每个脚本进行手动调整,比较繁琐。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【Unity3D日常开发】Unity3D中实现不同脚本之间的执行顺序控制](https://blog.csdn.net/q764424567/article/details/128920346)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Unity改变脚本执行顺序](https://blog.csdn.net/weixin_42935398/article/details/123800807)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值