在Unity脚本中,有一些事件函数按照脚本执行的顺序执行。 这个执行顺序如下所述:
编辑器
reset:重置被调用来初始化脚本的属性,当它第一次连接到对象,也是使用重置命令时。
第一个场景加载
当一个场景开始时,这些函数被调用(场景中的每个对象一次)。
Awake:这个函数总是在任何启动函数之前被调用,并且在实例化预制件之后。 (如果游戏对象在启动过程中处于非活动状态,则只有在唤醒之后才会调用它。)
OnEnable :(仅在Object处于活动状态时调用):在启用对象后立即调用此函数。 当创建一个MonoBehaviour实例时会发生这种情况,比如当一个级别被加载或者一个带有脚本组件的GameObject被实例化时。
OnLevelWasLoaded:执行该函数以通知游戏已经加载了新的级别。
请注意,对于添加到场景中的对象,所有脚本的Awake和OnEnable函数将在调用Start,Update等之前被调用。 当然,在游戏过程中实例化一个对象时,这是不能实施的。
在第一帧更新之前
Start:只有在启用脚本实例的情况下才会在第一次帧更新之前调用Start。
在帧之间
OnApplicationPause:在检测到暂停的帧的末尾调用,在正常帧更新之间有效。 在调用OnApplicationPause之后,会发出一个额外的帧,以允许游戏显示指示暂停状态的图形。
Update的顺序
当你跟踪游戏逻辑和交互,动画,摄像头位置等时,可以使用几个不同的事件。常用模式是执行Update函数中的大部分任务,但也可以使用其他函数。
FixedUpdate:FixedUpdate通常比Update更频繁地被调用。如果帧速率较低,则可以每帧调用多次,如果帧速率较高,则帧间可能完全不调用。所有的物理计算和更新都是在FixedUpdate之后立即发生的。在FixedUpdate中应用运动计算时,您不需要将值乘以Time.deltaTime。这是因为FixedUpdate是在可靠的定时器上调用的,与帧速率无关。
Update:每帧调用一次Update。这是帧更新的主要功能。
LateUpdate:更新完成后,LateUpdate每帧调用一次。在更新中执行的任何计算将在LateUpdate开始时完成。 LateUpdate常见的用途是以下第三方相机。如果您让角色在“更新”中移动并进行转换,则可以在“LateUpdate”中执行所有相机移动和旋转计算。这将确保角色在摄像头跟踪其位置之前完全移动。
渲染
OnPreCull:在照相机拣选场景之前调用。剔除确定哪些对象对相机可见。 OnPreCull在剔除发生之前被调用。
OnBecameVisible / OnBecameInvisible:当一个对象对任何相机变得可见/不可见时调用。
OnWillRenderObject:如果对象可见,则为每个相机调用一次。
OnPreRender:在相机开始渲染场景之前调用。
OnRenderObject:完成所有常规场景渲染后调用。此时可以使用GL类或Graphics.DrawMeshNow绘制自定义几何图形。
OnPostRender:相机完成渲染场景后调用。
OnRenderImage:场景渲染完成后调用以允许对图像进行后期处理,请参阅后期处理效果。
OnGUI:响应GUI事件,每帧调用多次。 Layout和Repaint事件首先被处理,然后是每个输入事件的布局和键盘/鼠标事件。
OnDrawGizmos用于在场景视图中绘制Gizmos以进行可视化。
协同程序
更新函数返回后,将运行正常的协程更新。 协程是一个函数,可以暂停执行(yield),直到给定的YieldInstruction完成。 协程的不同用途:
yield 在所有更新函数在下一帧被调用后,协程将继续。
yield WaitForSeconds在指定的时间延迟之后继续,在为该帧调用所有更新函数后继续
yield WaitForFixedUpdate在所有脚本上调用了所有FixedUpdate后继续
yield WWW在WWW下载完成后继续。
yield StartCoroutine链接协程,并等待MyFunc协同程序先完成。
当对象被销毁时
OnDestroy:在对象存在的最后一帧的所有帧更新之后调用此函数(该对象可能在响应Object.Destroy时或在场景关闭时被销毁)。
退出时
这些函数被调用到场景中的所有活动对象上:
OnApplicationQuit:在应用程序退出前,所有游戏对象都会调用这个函数。 在编辑器中,当用户停止播放模式时被调用。
OnDisable:当行为被禁用或不活动时,此函数被调用。

OnMouseEnter:当鼠标进入GUIElement(GUI元素)或其他Collider时,调用该函数。

OnMouseOver:当鼠标悬浮在GUIElement(GUI元素)或其他Collider时调用该函数,是每帧都调用。

OnMouseExit:当鼠标移出GUIElement(GUI元素)或其他Collider时,调用该函数。

OnMouseDown:当鼠标在GUIElement(GUI元素)或其他Collider上点击时,调用该函数

OnMouseUp:当用户释放按钮时调用该函数

OnMouseUpAsButton:只有鼠标在同一个GUIElement(GUI元素)或其他Collider上按下,在释放时才会调用该函数

OnMouseDrag:当用户鼠标拖拽GUIElement(GUI元素)或其他Collider时,调用该函数。