关于同一个GameObject上面的多个monobehavior的Awake顺序问题

今天做一个需求,这个需求会在同一个gameobject上面挂载多个monobehavior脚本。这几个脚本在Awake时要获取彼此的实例,如下图所示:

三个类的Awake脚本大概是这样:

那么问题来了,

1. 已知Unity的脚本Awake是有顺序的,那么这三个先后顺序是固定的吗?

2. 假如三个脚本先后Awake,那么第一个Awake的类会不会得不到另外两个类的实例?

我连续运行了5次,都是下面的结果:

Awake的顺序是3->2->1。

由此结果可以推导出第二个问题的答案,那就是脚本没有awake时也是可以被获取到的。至于为什么会这样,我在Unity手册里找到了这段话:

For active GameObjects placed in a Scene, Unity calls Awake after all active GameObjects in the Scene are initialized, so you can safely use methods such as GameObject.FindWithTag to query other GameObjects.

意思是当Awake执行的时候,Unity已经把场景里所有的激活状态的物体都初始化完毕了,所以你可以获取场景里的任何物体或者物体身上的组件。

完美解释!

先别急着推断第一个问题的答案,我们多做下实验,我现在调整了脚本在gameobject上的顺序如下:

再重启Unity并重新运行:

Awake的顺序还是3->2->1,并没有改变。

这里我挺迷惑的,因为今天在公司做的实验,当我重启unity后Awake顺序就变了。所以第一个问题暂时没有结论。。。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值