Unity3D脚本生命周期

https://www.cnblogs.com/liuhan333/p/6477161.html

编辑
Reset:Reset函数在脚本属性第一次添加到对象上初始化的时候就被调用,当然这个函数也可以显式调用。
场景第一次加载
下面的函数会在场景加载的时候被调用(场景中的每个对象只会调用1次)。
Awaka:当一个prefab在初始化完成之后,这个函数会在任何Start函数调用前被激活。(如果一个对象在启动阶段是未激活状态,Awaka是不会被调用的)
OnEnable:只有当对象是激活状态才会被调用,这个函数会在对象被激活之后立刻调用。一个MonoBehaviour实例被创建后就会调用,例如关卡被加载或一个带有脚本组件的对象初始化完成。
OnLevelWasLoaded:这个函数是用来通知游戏一个新的关卡已经加载完成。
对于所有添加到场景中的对象来说,Awaka和OnEnable函数对于所有的脚本来说会在Start、Update之前被执行。
在第一帧更新前
Start:当脚本实例被激活时的第一帧刷新前,Start就会被调用。
对于所有添加到场景中的对象,Start函数对于所有的脚本来说会在Update之前被调用。
在每一帧中
OnApplicationPause:当暂停状态激活的那一帧的最后,这个函数会被调用。
刷新顺序
FixedUpdate:FixedUpdate比Update函数更经常被调用,它可以在一帧内多次调用。如果帧率比较低,它可能会被调用多次,如果帧率比较高,它可能不会被调用。所有的物理计算和刷新都会在FixedUpdate之后立即进行。如果要在FixedUpdate中执行移动计算,你不需要使用Time.deltaTime来乘以你的值,因为FixedUpdate是基于一个可靠的定时器被调用,独立于帧率之外。
Update:Update函数会每帧调用一次,它是每帧最重要的刷新函数。
LateUpdate:每帧Update函数结束后,LateUpdate就会被调用。当LateUpdate开始时,任何Update内的计算都会结束。一个常见的LateUpdate应用就是第三人称视角跟随,如果你让你的主角移动和转向在Update函数内进行,你可以把所有的摄像机移动和旋转计算放在LateUpdate里面,这可以保证主角在摄像机跟随前已经移动结束。
渲染
OnPreCull:在摄像机剔除整个场景的时候调用,剔除决定了哪些对象对摄像机来说是可见的。OnPreCull会在剔除进行前调用。
OnBecameVisible/OnBecameInvisible:对任意的摄像机,在对象变可见和不可见的时候调用。
OnWillRenderObject:对每个摄像机只有当对象是可见的情况下调用一次。
OnPreRender:在摄像机开始渲染场景之前调用。
OnRenderObject:当常规的场景渲染完成后被调用,可以在这个时候使用GL类或者Graphics.DrawMeshNow来绘制自定义的几何。
OnPostRender:当摄像机完成场景渲染后调用。
OnRenderImage:当场景渲染允许执行图片的后期处理的时候调用,例如ImageEffects。
OnGUI:在一帧中调用多次来应答GUI事件。布局和重绘事件会优先处理,接着是键盘/鼠标的输入事件。
OnDrawGizmos:出于可视化目的,处理场景中绘制Gizmos对象。
协同程序
正常的协程刷新是在Unpdate函数返回时运行。一个协程是一个能够暂停其执行(yield)直到YieldInstruction结束后的一个函数。下面是协程的不同用法:
yield:协程会在下一帧调用完所有的Update函数后持续执行。
yield WaitForSeconds:在下一帧调用完所有的Update函数后,一个特定的延迟之后执行。
yield WaitForFixedUpdate:在所有的脚本已经调用完所有的FixedUpdate后执行。
yield WWW:一个WWW的下载完成后执行。
yield StartCoroutine:协程链,会先等待自定义协程完成后执行。
对象销毁
OnDestroy:这个函数会在对象存在的最后一帧所有的帧刷新函数调用结束后调用(对象可能会因为Object.Destroy而销毁或者随着场景的关闭)
退出
这些函数会在场景中所有的激活的对象上调用:
OnApplicationQuit:在应用程序退出前所有的游戏对象会调用。在编辑器中,当停止playmode就会调用这个函数。在web播放器中,当web view关闭时就会调用这个函数。
OnDisable:当behaviour变为disabled or inactive状态,这个函数就会被调用。

 

渲染

  • OnPreCull: 在相机剔除场景之前调用此函数。相机可见的对象取决于剔除。OnPreCull 函数调用发生在剔除之前。
  • OnBecameVisible/OnBecameInvisible: 在对象对于相机可见/不可见时调用此函数。
  • OnWillRenderObject: 如果对象可见,则为每个相机调用一次此函数。
  • OnPreRender: 在相机开始渲染场景之前调用此函数。
  • OnRenderObject: 在完成所有常规场景渲染后调用此函数。此时,可使用 GL 类或 Graphics.DrawMeshNow 绘制自定义几何图形。
  • OnPostRender: 在相机完成场景渲染后调用此函数。
  • OnRenderImage(仅限专业版): 在完成场景渲染后调用此函数,以便对屏幕图像进行后处理。
  • OnGUI: 在每帧上多次调用此函数,以响应 GUI 事件。程序首先将处理 Layout 和 Repaint 事件,然后再处理每个输入事件的 Layout 和 keyboard/鼠标事件。
  • OnDrawGizmos 用于在场景视图中绘制小图示 (Gizmos),以实现可视化目的。

参考资料:

1.Execution Order of Event Functions http://docs.unity3d.com/Manual/ExecutionOrder.html
2.游戏蛮牛Unity 用户文档1.0 http://www.unitymanual.com/m/Manual/index.htm

原文地址:https://www.cnblogs.com/nafio/p/9137585.html