三教杯项目问题1——关于Awake、Start执行顺序的问题

本文介绍了在Unity开发中遇到的对象池初始化问题,问题源于Start中调用对象池导致未初始化。通过将初始化语句移至Awake解决。分析了Unity中Awake和Start的执行顺序:所有对象的Awake先随机执行,然后统一调用Start。Awake用于对象初始化,Start用于后续操作,确保对象已初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

缘由

刚接触了一周Unity就匆匆忙忙参加了学校的一个一周限时游戏开发的比赛,结果由于对Unity的不熟悉导致出现了各种奇奇怪怪的问题。本来计划好的很多功能最终因为要解决冒出来的各种问题导致只实现了很小一部分。现在“作业”终于提交上去了,抽空来整理一下遇到的各种问题。

我做的是一个射击类型的游戏。既然是射击类型的游戏那肯定避免不了要使用对象池。然而奇怪的是,在游戏开始之后虽然对象池内已经生成了预设体,但是Unity却抛出了找不到对象池中对象的问题。通过各种排查发现,原来是调用的时候对象池还没有初始化,而产生这个问题的原因是把对象池的初始化语句放在了Start中导致的,把初始化语句挪到Awake中完美的解决了问题。那么Unity中Awake、Start他们的运行和顺序到底是怎样的呢?

分析

查看一下Unity官方的API吧。(以下是我自己翻译的,仅供参考)

Awake()

当加载脚本实例时调用Awake。

Awake被用来在游戏开始前初始化任何变量或游戏状态。在脚本的生命周期中只调用一次Awake。当所有对象被初始化之后调用Awake,因此你可以安全的让其他对象使用例如GameObject.FindWithTag。每个GameObject的Awake的调用是随机的。因此,你需要使用Awake建立脚本之间的引用,使用Start来相互传递信息。Awake总是在启动任何函数之前被调用。这允许你对脚本的初始化进行排序。Awake不能扮演coroutine的角色。

Start()

Start在脚本启用之后,第一次调用任何Update方法之前的帧调用。像Awake函数一样,在脚本的生命周期中只会调用一次Start。然而&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值