【发布时间】:2016-07-15 02:42:52
【问题描述】:
Unity Manual 描述了调用脚本函数的顺序。但是,我想知道在 Unity 中考虑游戏对象本身的顺序是否有任何规则。
GameObjects 基本上是 Unity 场景图的节点,并且(假设场景本身是根节点)它们形成一棵树。我想知道该树结构是否对考虑游戏对象的顺序施加了任何规则。
如前所述,手册描述了Awake() 总是在Start() 之前调用,Start() 总是在第一次调用Update() 之前调用,依此类推。然而,这些时间关系(大部分)是在单个 GameObject 上的单个脚本的范围内给出的。我想知道是否还有一条规则说明在场景中的所有游戏对象上调用Start()(或任何其他方法)的顺序。
我特别想知道:
- 父母总是先于孩子考虑吗?
- 兄弟姐妹在场景图中的显示顺序是否相同?
- 脚本执行顺序是仅在单个游戏对象的范围内执行,还是考虑所有游戏对象?
【问题讨论】:
-
我是要告诉您,您可以通过几个对象、脚本和子项的基本设置轻松获得答案,然后我意识到您发布了问题的答案。现在是我的问题,因为这是一个相当容易回答的微不足道的问题,为什么要问?
-
这是一个困扰我多年的问题,现在我终于下楼测试了它,我认为它可能值得分享,因为我无法在 SO 上找到任何记录在案的答案。我敢肯定它之前引起了很多人的头疼,尤其是在重新加载场景时顺序可能会改变的事实。就像“昨晚我关闭它时它起作用了,为什么它今天不起作用?”
-
我想说,如果你需要对象 A 在对象 B 之前发生,你就有一个关系,所以你不能再依赖 Unity 更新系统并且 A 必须调用 B。你自己说的, 重新加载可能会改变顺序,因此知道下一次可能会出错意味着如果您继续依赖 Unity 更新,并且知道有一天它会失败,那么您正在做它 wruuuung。
-
是的,这几乎就是我给出的答案得出的结论。在我得到答案之前,我无法得出这个结论。 Unity 保证所有 UI 元素都按照场景图定义的顺序绘制:兄弟姐妹在层次结构中的显示顺序,子元素在父元素之后。此外,GameObjects 形成一个场景图,因此它们的变换不能在其父变换之前计算。我只是自然地假设脚本执行遵循相同的规则。
-
你不能编程,所以这很重要。