logo小熊博客
首页 fk标记语言示例 登录
目录
Unity 的生命周期

Unity 的生命周期(Life Cycle)是指 Unity 在运行游戏时对每个脚本调用的一系列方法顺序。理解生命周期能帮助你在合适的时机执行初始化、逻辑处理、渲染、清理等操作。

下面是 MonoBehaviour(Unity脚本的基类)生命周期函数的执行顺序与作用:

🟡 1. 初始化阶段(只调用一次)

Awake()

  1. **作用**:对象实例化后最先被调用。
  2. **特点**:即使脚本被禁用,也会被调用。
  3. **用途**:设置变量的初始值、加载资源、注册事件等。
  4. **注意**:其他脚本可能还没执行 Awake(),避免依赖其他组件的状态。
void Awake()
{
    Debug.Log("Awake 被调用");
}

OnEnable()

  1. **作用**:当脚本启用(enabled = true)或 GameObject 激活时调用。
  2. **用途**:可以注册事件、启动协程等。
void OnEnable()
{
    Debug.Log("OnEnable 被调用");
}

Start()

  1. **作用**:在 Awake() 后、在第一帧 Update() 前调用。
  2. **特点**:只在脚本启用状态下执行一次。
  3. **用途**:用来访问其他组件、开始游戏逻辑等。
void Start()
{
    Debug.Log("Start 被调用");
}

🟢 2. 游戏循环阶段(每帧调用)

Update()

  1. **作用**:每帧调用一次。
  2. **用途**:处理输入、移动、计时器、状态更新等逻辑。
  3. **执行频率**:受帧率影响,帧率越高,调用越频繁。
void Update()
{
    Debug.Log("Update 每帧调用");
}

LateUpdate()

  1. **作用**:在所有 Update() 调用后执行。
  2. **用途**:适合处理摄像机跟随、骨骼动画等依赖其他更新后的逻辑。
void LateUpdate()
{
    Debug.Log("LateUpdate 每帧调用");
}

FixedUpdate()

  1. **作用**:按照固定时间间隔调用,与物理系统同步。
  2. **用途**:用于物理相关的处理(刚体运动、碰撞检测等)。
  3. **注意**:受 Time.fixedDeltaTime 控制,不随帧率变化。
void FixedUpdate()
{
    Debug.Log("FixedUpdate 用于物理更新");
}

🔴 3. 暂停/禁用阶段

OnDisable()

  1. **作用**:当脚本被禁用或对象失活时调用。
  2. **用途**:注销事件、停止协程、防止内存泄漏等。
void OnDisable()
{
    Debug.Log("OnDisable 被调用");
}

⚫ 4. 销毁阶段

OnDestroy()

  1. **作用**:对象被销毁时调用。
  2. **用途**:释放资源、断开连接、清理引用。
void OnDestroy()
{
    Debug.Log("OnDestroy 被调用");
}

✅ 附加说明

OnApplicationQuit()

  1. **作用**:在退出游戏时调用(仅限 PC、Mac)。
  2. **用途**:保存数据、断开网络、清理资源等。

🔁 生命周期完整流程图示(启用对象):

Awake() 
→ OnEnable()
→ Start()
→ Update() / FixedUpdate() / LateUpdate() 循环执行
→ OnDisable()
→ OnDestroy()

🔄 生命周期总结表格

方法调用时机每帧调用是否可禁用触发

Awake

对象实例化时

OnEnable

脚本启用时

Start

第一次 Update 之前

Update

每帧调用

LateUpdate

每帧最后执行

FixedUpdate

每固定时间执行

OnDisable

脚本禁用时

OnDestroy

对象销毁时

OnApplicationQuit

应用退出时

上一篇:Unity中的单例模式
下一篇:Unity点击事件不生效
请我喝奶茶!
赞赏码
手机扫码访问
手机访问