编辑器阶段
Reset方法:当脚本第一次添加到游戏对象或当前执行Reset命令时会调用。
场景第一次加载
该阶段其实也就是脚本第一次加载阶段。
会调用的方法:(这两个方法会在所有的Start和Update方法之前调用)
Awake方法:在Start方法调用前调用,且不管是否激活状态都会被调用。
OnEnable方法:在对象可用之后被调用,需要特别注意的是,仅在激活状态下可用,也就是当一个MonoBehaviour实例被创建的时候可用。
例如,当加载一个场景或拥有该组件的游戏对象被实例化时。
第一帧更新之前的阶段
Start方法:如果脚本实例为可用,则Start函数在第一帧更新之前被调用。
执行阶段
OnApplicationPause方法:当检测到暂停状态时,会在当前帧结束之后调用该方法。
渲染部分
当游戏脚本被初始化完成,并且进入了正常的逻辑更新周期之后,一些渲染事件有可能会调用相应的方法。
常见的方法有:
OnPreCull:在相机剔除场景前被调用。剔除取决于物体在相机中是否可见。OnPreCull仅在剔除执行之前被调用。
OnBecameVisible和OnBecameInvisible:当物体在任何相机中可见或不可见的时候调用。
OnWillRenderObject:如果物体可见,它将为每个相机调用一次。
OnPreRender:在相机渲染场景之前被调用。
OnRenderObject:在所有固定场景渲染之后被调用。此时可以使用GL类或者Graphics.DrawMeshNow来画自定义的几何物体。
OnPostRender:在相机完成场景的渲染后被调用。
OnRenderImage:在场景渲染完成后被调用,用来对屏幕图片进行处理。
OnGUI:每帧被调用,多次用来回应GUI事件。布局和重绘事件先被执行,接下来是为每一次的输入事件执行布局和键盘、鼠标事件。
OnDrawGizmos:为了可视化的目的,在场景视图中绘制小图标。
可以在OnBecameVisible和OnBecameInvisible中设置对象的enabled,来避免游戏的无谓开销。
游戏对象销毁阶段
OnDestory:在对象存在的最后一帧调用。
游戏场景退出阶段
OnApplicationQuit:在退出之前所有的游戏对象都会调用该方法。
大概的执行顺序:
- 调用所有的Awake方法。
- 调用所有的Start方法。
- 游戏逻辑循环(物理部分,注意根据设定的时间间隔来确定)
- 调用所有的FixedUpdate
- 物理模拟
- OnEnter、Exit、Stay触发函数
- OnEnter、Exit、Stay碰撞函数
- 刚体插值,主要作用于位置transform.position和角度transform.rotation
- OnMouseDown、OnMouseUp等输入事件
- 所有的Update函数
- 高级动画、混合并应用到变换。
- 所有的LateUpdate函数。
- 渲染
- 对象销毁或退出场景