Unity事件函数

Unity事件函数

@(Unity)

First Scene Load 加载第一个场景

scene启动 (一次为每个场景中的对象) 时,会调用这些函数。

  • Awake:此函数始终是开始任何职能之前调用,并且也是在一个prefab
    实例化之后。(如果一个GameObject处于非活动状态,Awake不会被调用当被激活,直到该对象被激活或者该对象挂接的任意脚本中的某个函数被调用才会让Awake执行)
  • OnEnable(只有对象处于活动状态时被调用):在对象被启用后,将调用此函数。发生这种情况是在创建一个MonoBehaviour实例时,例如当加载一个level或游戏对象带有脚本组件被实例化。

注意:对于那些添加在场景中的对象,所有脚本的AwakeOnEnabled都会在调用Start, Update等函数之前进行调用。通常当一个对象在游戏运行时被实例化时这方式不是必须的。

Editor 编辑器

  • Reset:当脚本第一次attached到对象或者使用了Reset命令之后调用,来初始化脚本的各个属性

Before the first frame update 第一帧更新之前

  • Start:在脚本实例激活时在第一帧的Update之前被调用
    对于加入到场景上的对象,所有脚本的start函数会在Update和其他函数之前调用,通常当一个对象在游戏运行时被实例化时这方式不是强制性的。

In between frames 帧与帧之间

  • OnApplicationPause:pause被检测到时,在当前帧的末尾调用,实际上是调用OnApplicationPause后产生一个额外的帧,在正常的帧Update之间,来显示游戏在暂定时的画面。

Update Order Update顺序

当你要跟踪保存游戏逻辑与交互信息、动画、镜头位置等信息时,你可以使用一下几个不同的事件。常见的手断是在Update中执行大量任务,但你也可以用其他函做到这些:

  • FixedUpdateFixedUpdate比Update调用的更加频繁。帧速低时可以每帧里多次调用,帧速较高时不在帧之间调用。所有物理计算和Updates都在FixedUpdate后立即执行。当在FixedUpdate函数里使用位移计算时,你不需要通过Time.deltaTime去增加你的数值,那是因为FixedUpdate不依赖于帧速而是在一个可靠地计时器内调用。(每秒固定调用)
  • Update:每帧调用,它是每帧更新的主力函数。
  • LateUpdateLateUpdateUpdate执行后每帧调用一次。当LateUpdate开始时任何Update内的计算都会先完成。(LateUpdate的一个常见用法就是跟随式的tps镜头。如果你让你的角色在Update里进行移动和和转向,你可以在LateUpdate内执行镜头的移动和转向计算。这会确保角色在镜头跟随他的位置之前已经移动完毕)

Rendering 渲染

  • OnPreCull:在相机开始裁剪场景之前调用。裁剪决定哪个物体对于相机来说是可见的。函数只在裁剪进行前调用。
  • OnBecameVisible/OnBecameInvisible:任意镜头里的物体显示或隐藏时调用
  • OnWillRenderObject:如果物体可见,每个相机都会调用一次。
  • OnPreRender:镜头开始渲染场景之前调用
  • OnRenderObject:所有场景渲染完毕后调用,在这一时刻你可以用GL类或者Graphics.DrawMeshNow:绘制自定义几何图形
  • OnPostRender:在镜头渲染场景之后调用
  • OnRenderImage:在场景渲染完毕后调用来进行后处理。
  • OnGUI:响应gui事件时每帧调用多次。布局和重绘事件优先处理,接着是输入事件有关的布局和键盘鼠标事件
  • OnDrawGizmos:用来在场景视图中绘制Gizmos以实现可视化目的

Coroutines 协同程序

通常在update函数返回后运行协程更新。协程是一个可以暂停执行(yield)直到被设定的中断指令完成再继续运行的函数。

  • yield:协程会在下一帧的所有update函数调用后继续运行。
  • yield WaitForSeconds : 在一帧里的update函数都执行后,会在延迟指定时间后继续执行。
  • yield WaitForFixedUpdate : 在所有脚本调用fixedupdate后继续执行。
  • yield WWW : 网络加载完成后继续执行。
  • yield StartCoroutine: 约束协程并等待当前函数协程首先完成。

When the Object is Destroyed 销毁对象期间

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

When Quitting 退出期间

场景中的所有活动对象都会调用下面的函数

  • OnApplicationQuit:在程序退出之前所有的游戏对象都会调用这个函数,在编辑器中会在用户终止播放模式时调用。在网页插件中会在网页视图关闭时调用。
  • OnDisable:当对象变为不可用或非激活时调用

Script Lifecycle Flowchart脚本生命周期流程图

下面的图标总结表述了脚本生命期内的事件函数的执行顺序和重复调用

posted @   KelvinVS  阅读(923)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示