【问题标题】:GameObject update order in UnityUnity 中的 GameObject 更新顺序
【发布时间】:2016-07-15 02:42:52
【问题描述】:

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

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

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

我特别想知道:

  1. 父母总是先于孩子考虑吗?
  2. 兄弟姐妹在场景图中的显示顺序是否相同?
  3. 脚本执行顺序是仅在单个游戏对象的范围内执行,还是考虑所有游戏对象?

【问题讨论】:

  • 我是要告诉您,您可以通过几个对象、脚本和子项的基本设置轻松获得答案,然后我意识到您发布了问题的答案。现在是我的问题,因为这是一个相当容易回答的微不足道的问题,为什么要问?
  • 这是一个困扰我多年的问题,现在我终于下楼测试了它,我认为它可能值得分享,因为我无法在 SO 上找到任何记录在案的答案。我敢肯定它之前引起了很多人的头疼,尤其是在重新加载场景时顺序可能会改变的事实。就像“昨晚我关闭它时它起作用了,为什么它今天不起作用?”
  • 我想说,如果你需要对象 A 在对象 B 之前发生,你就有一个关系,所以你不能再依赖 Unity 更新系统并且 A 必须调用 B。你自己说的, 重新加载可能会改变顺序,因此知道下一次可能会出错意味着如果您继续依赖 Unity 更新,并且知道有一天它会失败,那么您正在做它 wruuuung。
  • 是的,这几乎就是我给出的答案得出的结论。在我得到答案之前,我无法得出这个结论。 Unity 保证所有 UI 元素都按照场景图定义的顺序绘制:兄弟姐妹在层次结构中的显示顺序,子元素在父元素之后。此外,GameObjects 形成一个场景图,因此它们的变换不能在其父变换之前计算。我只是自然地假设脚本执行遵循相同的规则。
  • 你不能编程,所以这很重要。

标签: unity3d unity5


【解决方案1】:

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

我找到了以下答案:

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

【讨论】:

猜你喜欢
  • 2015-10-25
  • 1970-01-01
  • 2014-12-30
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多