编辑器阶段

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:在退出之前所有的游戏对象都会调用该方法。

 

 

 大概的执行顺序:

  1. 调用所有的Awake方法。
  2. 调用所有的Start方法。
  3. 游戏逻辑循环(物理部分,注意根据设定的时间间隔来确定)
  1. 调用所有的FixedUpdate
  2. 物理模拟
  3. OnEnter、Exit、Stay触发函数 
  4. OnEnter、Exit、Stay碰撞函数
  1. 刚体插值,主要作用于位置transform.position和角度transform.rotation
  2. OnMouseDown、OnMouseUp等输入事件
  3. 所有的Update函数
  4. 高级动画、混合并应用到变换。
  5. 所有的LateUpdate函数。
  6. 渲染
  7. 对象销毁或退出场景