Unity中常见的脚本生命周期函数及顺序

Unity中的脚本生命周期函数包括Awake、OnEnable、Start、FixedUpdate、Update、LateUpdate、OnGUI、OnDisable和OnDestroy等,分别在对象创建、激活、每帧更新等不同阶段调用。这些函数用于初始化、更新和清理对象状态。注意,OnGUI仅在处理GUI时调用,且不同脚本的生命周期函数调用顺序不确定,应避免依赖。

游戏物体生命周期

  • 场景中的游戏物体通过脚本来控制其具体行为。
  • 生命周期流程图点击跳转
  • 脚本里重点事件函数:
    • Awake:游戏物体实例化后并处于激活状态时调用,即使脚本组件没有激活也会调用,而且总是在Start()函数之前调用,用于初始化对象的引用和状态。
    • OnEnable:游戏物体与脚本组件激活时调用(会反复触发),用于进行初始化操作。
    • Start:游戏物体与脚本组件处于激活状态,在 Awake 之后调用,在Update()运行前调用(只调用一次,当物体关闭激活状态,再打开时不会反复触发),用于在对象被启用前进
### Unity 生命周期函数调用顺序Unity 中,生命周期函数的执行顺序是固定且有序的。对于每个对象上的每个脚本实例而言,这些函数会依照特定序列被逐一触发。 #### 初始化阶段 - **Awake** 当场景加载完成之后,在任何 `Start` 方法前调用该方法。如果多个组件都定义了 `Awake()` 函数,则其实际调用次序不确定,不过开发者可以手动调整以确保预期行为[^2]。 - **OnBeforeTransformParentChanged (仅限于父物体变换即将改变时)** 此回调会在当前 GameObject 的 Transform 即将成为另一个 GameObject 子节点之前立即得到通知。 - **OnInitAnimator (仅适用于带有 Animator 组件的对象)** 这是在初始化动画控制器时会被调用的方法。 - **Start** 只有当 Script 实例第一次启用并准备开始工作的时候才会被执行一次;它通常位于第一个 Update 前面发生。 #### 更新循环 - **FixedUpdate** 物理计算和物理引擎相关的操作应该放置在此处,因为它是基于固定的时间间隔来进行更新而不是每一帧都刷新。 - **PreLateUpdate 和其他内部更新过程** 包含一系列由 Unity 自身管理的过程,比如摄像机渲染等。 - **Update** 是最常用的每帧更新逻辑所在位置,适合用来处理大多数的游戏逻辑业务,如输入检测、角色移动控制等等[^5]。 - **LateUpdate** 总是在常规 `Update` 循环结束后才运行,常用于跟随相机或者其他依赖于上一帧结果的操作。 #### 渲染相关 - **OnPostRender** 对应着每一个 Camera 执行完毕后的时刻,可用于自定义后期效果绘制等内容。 - **OnGUI/OnGUIScene(已废弃)** #### 销毁清理 - **OnDestroy** 在 MonoBehaviour 被销毁时调用,无论是通过代码还是由于场景切换等原因造成的卸载都会触发展开相应的资源释放动作。 #### 应用程序级别事件响应 - **OnApplicationPause(bool pauseStatus)** 表明应用程序进入暂停状态或是恢复活动状态之时所发生的事件。 - **OnApplicationFocus(bool focusStatus)** 用户界面获得或失去焦点的情况下将会激活此消息传递机制。 - **OnApplicationQuit()** 在应用正式结束前给予最后一次机会去执行必要的收尾任务,例如保存进度数据到持久化存储介质里[^4]。 ```csharp using UnityEngine; public class LifecycleExample : MonoBehaviour { void Awake(){ Debug.Log("Awake called"); } void OnEnable(){ Debug.Log("OnEnable called"); } void Start(){ Debug.Log("Start called"); } private void FixedUpdate(){ Debug.Log("FixedUpdate called"); } void Update(){ Debug.Log("Update called"); } void LateUpdate(){ Debug.Log("LateUpdate called"); } void OnDestroy(){ Debug.Log("OnDestroy called"); } void OnApplicationQuit(){ Debug.Log("OnApplicationQuit called"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YTTTA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值