809 字
4 分钟
生命周期方法
概述
在 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"); } }}部分信息可能已经过时









