Awake、Start 和 Update 函数的调用情

在 Unity 场景转换过程中,Awake、Start 和 Update 函数的调用情况如下:
Awake 函数
Awake 函数会在脚本实例被创建时调用,对于场景转换来说:

调用时机:当一个场景加载完成,场景中所有游戏对象上的脚本的 Awake 函数都会被调用,而且在所有脚本的 Start 函数之前调用。如果场景之间存在一些游戏对象是通过 DontDestroyOnLoad 方法使其在场景切换时不被销毁 ,那么这些对象上脚本的 Awake 函数在新场景加载时 不会再次调用,因为它们并没有重新创建。
用途:通常用于游戏对象的初始化,比如获取组件引用(GetComponent)、初始化变量等。由于它在所有脚本的 Start 之前调用,而且一定会在游戏对象可用时调用,所以适合做一些依赖于游戏对象创建完成的基础设置。
Start 函数
Start 函数在脚本实例启用后调用,在场景转换中的调用情况是:

调用时机:当场景加载完成,游戏对象上脚本的 Awake 函数执行完毕后,会接着执行 Start 函数。但是对于那些通过 DontDestroyOnLoad 方法保留下来的游戏对象,在新场景加载后,其脚本的 Start 函数 不会再次调用,因为这些脚本实例没有重新启用的过程。
用途:常用于初始化一些需要在 Awake 之后,并且在游戏开始运行时才进行的操作,比如初始化一些需要依赖其他对象已经初始化完成的变量或逻辑。
Update 函数
Update 函数会在每一帧调用,在场景转换中的调用情况是:

调用时机:只要脚本所在的游戏对象处于启用(enabled 为 true)状态,并且所属的场景已经加载完成,Update 函数就会在每一帧被调用。对于使用 DontDestroyOnLoad 保留的游戏对象,在新场景加载后,只要它们没有被禁用,其脚本的 Update 函数会继续按照帧率正常调用。
用途:主要用于实现游戏中的实时逻辑,像处理玩家输入(如检测按键是否按下)、更新游戏对象的位置和状态(例如移动角色)等。

下面是一个简单的示例代码,帮助你理解它们的调用顺序:

csharp
using UnityEngine;

public class LifecycleExample : MonoBehaviour
{
private void Awake()
{
Debug.Log($“在 {name} 上 Awake 被调用”);
}

private void Start()
{
    Debug.Log($"在 {name} 上 Start 被调用");
}

private void Update()
{
    Debug.Log($"在 {name} 上 Update 被调用");
}

}

将上述脚本挂载到场景中的游戏对象上,运行游戏,观察控制台输出的日志,就能看到它们的调用顺序。当进行场景切换时,通过对游戏对象使用或不使用 DontDestroyOnLoad 方法,进一步验证它们在场景转换时的调用特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值