生命周期方法

生命周期方法

概述

在 Unity 中,每个继承自 MonoBehaviour​ 的脚本都有其特定的生命周期,包含一系列按特定顺序调用的方法。这些方法在不同的时间点被触发,用于执行不同类型的操作,如初始化、更新、清理等。

生命周期方法及调用顺序

1. Awake()

  • 调用时机:最早被调用,且每个脚本实例仅调用一次。
  • 用途:常用于单例模式的初始化,或进行一些无论组件是否激活都需要执行的基础设置。
  • 示例代码
private void Awake()
{
    Debug.Log("Awake");
}

2. OnEnable()

  • 调用时机:在 Awake()​ 之后调用,当组件被激活时触发,且每个激活周期仅调用一次。
  • 用途:可用于在组件激活时执行一些初始化操作,如订阅事件等。
  • 示例代码
private void OnEnable()
{
    Debug.Log("OnEnable");
}

3. Start()

  • 调用时机:在 OnEnable()​ 之后,Update()​ 之前调用,每个脚本实例仅调用一次。
  • 用途:适合用于设置一些初始值,因为此时所有对象都已初始化完成。
  • 示例代码
void Start()
{
    Debug.Log("Start");
}

4. FixedUpdate()

  • 调用时机:以固定频率调用,在 Update()​ 之前执行,默认每隔 0.02 秒调用一次。
  • 用途:常用于处理物理相关的操作,因为物理模拟是以固定时间步长进行的。
  • 示例代码
private void FixedUpdate()
{
    Debug.Log("FixedUpdate");
}

5. Update()

  • 调用时机:每帧调用一次,在 Start()​ 之后执行,每次调用与上次的时间间隔可能不同。
  • 用途:用于处理游戏中的大多数逻辑更新,如玩家输入处理、物体移动等。
  • 示例代码
void Update()
{
    Debug.Log("Update");
}

6. LateUpdate()

  • 调用时机:在每次 Update()​ 之后紧接着调用一次。
  • 用途:常用于处理需要在所有 Update()​ 操作完成后执行的任务,如相机跟随等。
  • 示例代码
private void LateUpdate()
{
    Debug.Log("LateUpdate");
}

7. OnDisable()

  • 调用时机:与 OnEnable()​ 相反,当组件失活时调用。
  • 用途:可用于在组件停用前执行一些清理操作,如取消事件订阅等。
  • 示例代码
private void OnDisable()
{
    Debug.Log("OnDisable");
}

8. OnDestroy()

  • 调用时机:当脚本所附着的对象被销毁后调用一次。
  • 用途:用于进行最后的清理工作,如释放资源等。
  • 示例代码
private void OnDestroy()
{
    Debug.Log("OnDestroy");
}

代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace TimeGhost
{
    public class test : MonoBehaviour
    {
        private void Awake() // 最早调用,只调用一次,单例模式
        {
            Debug.Log("Awake");
        }

        private void OnEnable() // 组件激活时调用,在awake之后调用,只调用一次
        {
            Debug.Log("OnEnable");
        }

        // Start is called before the first frame update
        void Start() // 在update之前调用,只调用一次,在onenable之后调用,可以在此设置一些初始值
        {
            Debug.Log("Start");
        }

        // Update is called once per frame
        void Update() // 每帧调用一次,在start之后调用,每次调用与上次时间间隔不相同
        {
            Debug.Log("Update");
        }

        private void LateUpdate() // 在每次update之后紧接着调用一次
        {
            Debug.Log("LateUpdate");
        }

        private void FixedUpdate() // 固定频率调用,在update之前调用,每隔固定时间调用一次默认0.02s
        {
            Debug.Log("FixedUpdate");
        }

        private void OnDisable() // 与onenable相反,组件失活时调用
        {
            Debug.Log("OnDisable");
        }

        private void OnDestroy() // 被销毁后调用一次
        {
            Debug.Log("OnDestroy");
        }
    }
}
posted @ 2025-03-21 23:59  hutaodd  阅读(149)  评论(0)    收藏  举报