unity 生命周期方法
时间: 2025-06-11 14:26:37 浏览: 15
### Unity 生命周期方法详解
#### 初始化阶段
当场景加载完成并准备运行时,Unity 将调用对象上的特定初始化函数。`Awake()` 函数会在脚本实例被创建之后立即调用,在任何 `Start()` 调用之前[^1]。
```csharp
void Awake()
{
Debug.Log("Object has been initialized.");
}
```
对于那些需要在所有其他组件启动前就准备好数据的情况非常有用。如果两个或多个脚本相互依赖,则可以使用 `[ExecuteAlways]` 或者通过设置 Script Execution Order 来控制它们之间的相对执行时间[^2]。
#### 开始阶段
一旦所有的 `Awake()` 方法都已结束,紧接着会触发一次性的 `OnEnable()` 和随后的 `Start()` 。注意只有激活状态下才会调用这些函数;如果是禁用状态则不会被执行。这使得开发者可以在每次启用该 GameObject 时做一些必要的准备工作。
```csharp
void OnEnable()
{
Debug.Log("GameObject is now enabled.");
}
void Start()
{
Debug.Log("Initialization complete, ready to start running logic.");
}
```
#### 更新循环
更新过程是游戏逻辑的核心部分之一,它包含了几个不同频率下工作的回调:
- **Update**: 每帧都会被调用,通常用来处理常规的游戏逻辑操作。
- **FixedUpdate**: 物理计算专用的时间间隔内固定次数地调用此函数,适用于物理模拟相关的任务。
- **LateUpdate**: 在每一帧最后时刻才执行,常用于追踪摄像机跟随目标物体等延迟动作.
```csharp
void Update()
{
// Handle standard game loop operations here.
}
void FixedUpdate()
{
// Physics calculations and movements go here.
}
void LateUpdate()
{
// Actions that should occur after all other updates are done.
}
```
#### 销毁阶段
当一个对象即将被销毁时,可以通过重写 `OnDisable()` 和/或 ` OnDestroy()` 方法来清理资源或保存进度信息。前者会在 GameObject 变成不可见或未激活的时候调用,而后者则是完全移除这个实体之前的最后一个机会。
```csharp
void OnDisable()
{
Debug.Log("GameObject is being disabled or the scene is changing.");
}
void OnDestroy()
{
Debug.Log("The object will be destroyed soon.");
}
```
阅读全文
相关推荐

















