Unity 中的游戏对象更新顺序

GameObject update order in Unity

Unity Manual描述了调用脚本函数的顺序。但是,我想知道在 Unity 中是否有关于游戏对象本身的考虑顺序的任何规则。

GameObjects 基本上是 Unity 场景图的节点,并且(假设场景本身是根节点)它们形成了一棵树。我想知道该树结构是否对考虑游戏对象的顺序强加了任何规则。

如前所述,手册描述 Awake() 总是在 Start() 之前调用,而 Start() 总是在第一次调用 Update() 之前调用,依此类推。然而,这些时间关系(大部分)是在单个游戏对象的单个脚本的范围内给出的。我想知道是否还有一条规则说明在场景中的所有游戏对象上调用 Start()(或任何其他方法)的顺序。

具体我想知道:

  1. parents 总是先于 children 被考虑吗?
  2. 兄弟姐妹的考虑顺序与它们在场景图中的显示顺序相同吗?
  3. 脚本执行顺序是只在单个游戏对象的范围内强制执行,还是考虑所有游戏对象?

我在 Unity 中构建了一个小型测试项目,它基本上由一个 3x3x3 的游戏对象树组成,每个游戏对象有 3 个脚本。

我找到了以下答案:

  1. 没有。有些游戏对象可以在 parents 之前考虑,而有些 parents 可以在 children 之前考虑。并且这个顺序可以在重新加载场景或操作场景图时改变。
  2. 没有。兄弟姐妹可以按任何顺序更新。重新加载场景或操作场景图时,此顺序可能会发生变化。
  3. 它对场景中的所有游戏对象强制执行。如果 SEO 设置脚本 A 在脚本 B 之前执行,那么脚本 A 的所有实例将在脚本 B 的任何实例之前被考虑。意思是,A 的所有实例在任何 B 调用它们的 Awake() 之前调用它们的 Awake(),然后 A 的所有实例在 B 的任何实例调用它们的 Start() 之前调用它们的 Start() 等等上。