最近在写程序时候因为调用顺序的一个小错误导致出现了Bug,所以想整体的整理一下Unity脚本的事件函数执行顺序。
脚本生命周期流程图:
首先看一下官方的流程图



下面根据时间线来梳理一下每个函数的调用时间以及用途特性:
场景加载时
场景内所有对象的 Awake 和 OnEnable 函数将在场景加载时被调用一次,
Awake: 在实例化对象之后会调用此函数如果对象的Active为false状态则在变为true之后才会调用。
OnEnable: 在启用对象之后会调用此函数SetActive时会调用OnEnable(),但是不会调用Awake()。在调用 SetActive(true)时,会触发OnEnable()事件,就算对象之前本就是activetrue,事件依然会发生,在调用SetActive(false)时,会触发OnDisable()事件,就算对象之前本就是activefalse,事件依然会发生。
还要注意的是在游戏过程中不能强制调用他们
Editor
Reset: Reset会在脚本首次附加到对象时以及在Inspector中reset时调用,所以他可以用于初始化脚本的属性
第一帧更新前
Start: Start会在第一帧更新前被调用,所有场景资源中的对象在调用Update()之前会先调用Start()
更新
FixUpdate: FixedUpdate()不受游戏帧率影响,他的调用基于独立于帧率的可靠的计时器,它可能在同一帧内执行多次,也可能在某帧不执行,这取决于游戏的帧率高低。因此若在FixedUpdate()做运动计算的时候,不需要考虑增量时间Time.deltaTime。
Update: Update()每帧调用一次,其调用次数和频率不是固定的,会根据帧率波动,这一点下面的LateUpdate也是一样的
LateUpdate: LateUpdate()也是每帧调用一次,会和Update在同一帧执行,它是在Update()执行完以后执行,他的执行次数也会根据帧率变化。对于要做摄像机跟随的游戏,可以在Update()中做移动转向逻辑,在LateUpdate()中做摄像机跟随。

本文详细解析Unity脚本生命周期中的Awake、OnEnable、Start、FixedUpdate、Update和LateUpdate函数调用时机,帮助开发者避免常见Bug。
&spm=1001.2101.3001.5002&articleId=120480107&d=1&t=3&u=f04c73f4b80e4a06a135edf978327fc5)
4926

被折叠的 条评论
为什么被折叠?



