Unity-Unity脚本生命周期

一、概述

Unity脚本生命周期是指在Unity游戏引擎中,脚本在运行过程中所经历的各个阶段。这些阶段包括:初始化、更新、固定更新、销毁等。下面我们来详细讲解一下Unity脚本生命周期的各个阶段。

阶段

1. Awake

Awake是脚本的初始化阶段,当脚本被实例化时,Awake函数会被调用且只执行一次。在这个阶段,脚本可以进行一些初始化操作,例如获取组件、初始化变量等。

2.OnEnable

OnEnable是脚本的启用阶段,当脚本被启用时,OnEnable函数会被调用。在这个阶段,脚本可以进行一些启用操作,例如开启协程、播放音效等。

3. Start

Start是脚本的启动阶段,当脚本被实例化后,Start函数会被调用。在这个阶段,脚本可以进行一些启动操作,例如播放动画、初始化游戏对象等。

4. FixedUpdate

FixedUpdate是脚本的固定更新阶段,每一帧都会调用一次。与Update不同的是,FixedUpdate是在固定时间间隔内调用的,因此在这个阶段,脚本可以进行一些需要在物理计算中使用的操作,例如移动刚体、检测碰撞等。

5. Update

Update是脚本的更新阶段,每一帧都会调用一次。在这个阶段,脚本可以进行一些更新操作,例如移动游戏对象、检测碰撞等。

6. LateUpdate

LateUpdate是脚本的后更新阶段,每一帧都会调用一次。在这个阶段,脚本可以进行一些后更新操作,例如相机跟随、角色动作等。

7. OnGUI

OnGUI是脚本的GUI绘制阶段,每一帧都会调用一次,执行的次数是 Update 事件的两倍。在这个阶段,脚本可以进行一些GUI绘制操作,例如绘制按钮、文本等。

8. OnDisable

OnDisable是脚本的禁用阶段,当脚本被禁用时,OnDisable函数会被调用。在这个阶段,脚本可以进行一些禁用操作,例如停止动画、停止音效等。

9. OnDestroy

OnDestroy是脚本的销毁阶段,当脚本被销毁时,OnDestroy函数会被调用。在这个阶段,脚本可以进行一些销毁操作,例如释放资源、停止协程等。

二、Unity脚本生命周期流程图

  1. 初始化阶段
    场景开始时

  1. Awake
    场景创建时或prefab实例化时,若为inactive则在active时调用,仅执行一次

  1. OnEnable
    场景加载完,GameObject实例化时,对象enabled时

  1. OnLevelWasLoaded
    场景全部加载完成后

  1. Reset Editor级别,非playmode下脚本挂载时或主动调用

  1. Start
    仅在场景中所有Awake 和 OnEnable执行后,所有场景中对象第一帧update之前,且仅执行一次

  1. 物理计算阶段

  1. fixedupdate
    每帧根据帧率高低可能多次调用也可能不调用,执行后立即开始物理计算和更新,做移动计算时无需使用Time.deltaTime

  1. 状态机周期

  1. 状态机更新

  1. OnStateMachineEnter
    挂载在一个动画图形上的状态机首次进入一个状态时的第一帧调用

  1. OnStateMachineExit
    退出状态的最后一帧调用

  1. 处理图形
    评估所有动画图形

  1. 触发动画事件
    在该时间内当前帧和最后一帧之间,触发所有动画片段的动画事件

  1. 状态周期回调(OnStateEnter/OnStateUpdate/OnStateExit) 一个状态层有最多三个活跃状态,current state, interrupted state, and next state,对应阶段周期方法顺序执行

  1. 内部物理更新

  1. 状态机周期

  1. 处理动画
    渲染动画结果图形

  1. IK动画周期
    由workthread写入Transform

  1. 写入属性
    由主线程写入场景其他动画属性

  1. 碰撞事件(Collision、Trigger)

  1. 协程(yield WaitForFixedUpdate)
    在所有脚本的FixedUpdated执行后再执行

  1. 输入事件

  1. OnMouseXXX

  1. 游戏逻辑

  1. update

  1. 协程
    除WaitForFixedUpdate和WaitForEndOfFrame其他协程时机

  1. 状态机周期
    同物理计算阶段过程,单无内部物理更新

  1. lateupdate 开始时update的计算都已完成,一普遍用法是相机跟随,update中对人物移动的计算已全部完成,此时在lateupdate中更新相机位置

  1. 场景渲染

  1. OnWillRenderObject
    若物体可见则每个相机调用一次

  1. OnPreCull
    相机剔除动作前

  1. OnBecameVisible/OnBecameInvisible
    对任何相机可见/不可见时调用

  1. OnPreRender
    相机渲染前

  1. OnRenderObject
    所有常规场景渲染完成时,可在此绘制自定义几何图形

  1. OnPostRender
    当一个相机渲染完场景后

  1. OnRenderImage
    场景渲染后,可对Image做后期处理(滤镜)

  1. Gizmo 渲染

  1. OnDrawGizmos
    仅在editor

  1. GUI渲染

  1. OnGUI 每帧多次调用

  1. 帧结束

  1. yield WaitForEndOfFrame

  1. 暂停

  1. OnApplicationPause
    一帧最后时调用,调用后会再触发一帧以刷新图像和切换暂停状态

  1. 退出/销毁

  1. OnApplicationQuit

  1. OnDisable

  1. OnDestroy
    所有帧刷新后

猜你喜欢

转载自blog.csdn.net/weixin_53163894/article/details/129671805
今日推荐