一、概述
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脚本生命周期流程图
初始化阶段
场景开始时
Awake
场景创建时或prefab实例化时,若为inactive则在active时调用,仅执行一次
OnEnable
场景加载完,GameObject实例化时,对象enabled时
OnLevelWasLoaded
场景全部加载完成后
Reset Editor级别,非playmode下脚本挂载时或主动调用
Start
仅在场景中所有Awake 和 OnEnable执行后,所有场景中对象第一帧update之前,且仅执行一次
物理计算阶段
fixedupdate
每帧根据帧率高低可能多次调用也可能不调用,执行后立即开始物理计算和更新,做移动计算时无需使用Time.deltaTime
状态机周期
状态机更新
OnStateMachineEnter
挂载在一个动画图形上的状态机首次进入一个状态时的第一帧调用
OnStateMachineExit
退出状态的最后一帧调用
处理图形
评估所有动画图形
触发动画事件
在该时间内当前帧和最后一帧之间,触发所有动画片段的动画事件
状态周期回调(OnStateEnter/OnStateUpdate/OnStateExit) 一个状态层有最多三个活跃状态,current state, interrupted state, and next state,对应阶段周期方法顺序执行
内部物理更新
状态机周期
处理动画
渲染动画结果图形
IK动画周期
由workthread写入Transform
写入属性
由主线程写入场景其他动画属性
碰撞事件(Collision、Trigger)
协程(yield WaitForFixedUpdate)
在所有脚本的FixedUpdated执行后再执行
输入事件
OnMouseXXX
游戏逻辑
update
协程
除WaitForFixedUpdate和WaitForEndOfFrame其他协程时机
状态机周期
同物理计算阶段过程,单无内部物理更新
lateupdate 开始时update的计算都已完成,一普遍用法是相机跟随,update中对人物移动的计算已全部完成,此时在lateupdate中更新相机位置
场景渲染
OnWillRenderObject
若物体可见则每个相机调用一次
OnPreCull
相机剔除动作前
OnBecameVisible/OnBecameInvisible
对任何相机可见/不可见时调用
OnPreRender
相机渲染前
OnRenderObject
所有常规场景渲染完成时,可在此绘制自定义几何图形
OnPostRender
当一个相机渲染完场景后
OnRenderImage
场景渲染后,可对Image做后期处理(滤镜)
Gizmo 渲染
OnDrawGizmos
仅在editor
GUI渲染
OnGUI 每帧多次调用
帧结束
yield WaitForEndOfFrame
暂停
OnApplicationPause
一帧最后时调用,调用后会再触发一帧以刷新图像和切换暂停状态
退出/销毁
OnApplicationQuit
OnDisable文章来源:https://www.toymoban.com/news/detail-628590.html
OnDestroy
所有帧刷新后文章来源地址https://www.toymoban.com/news/detail-628590.html
到了这里,关于Unity-Unity脚本生命周期的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!