2016-03-27 82 views
2

Unity Manual描述了調用腳本函數的順序。但是,我想知道是否有關於GameObjects本身在Unity中被考慮的順序的規則。Unity中的GameObject更新順序

GameObjects基本上是Unity場景圖的節點,並且(假設場景本身是根節點)它們形成一棵樹。我在想,如果這個樹結構在GameObjects被考慮的順序上施加了任何規則。

如前所述,手冊描述了Awake()總是在Start()之前調用,在第一次調用Update()之前總是調用等。然而,這些時間關係(大部分)在單個遊戲對象的單個腳本的範圍內給出。我想知道是否還有一條規則說明在場景中所有GameObjects上調用Start()(或任何其他方法)的順序。

具體來說,我想知道:

  1. 學生家長總是認爲自己的孩子有過嗎?
  2. 兄弟姐妹是否按照它們在場景圖中顯示的順序進行考慮?
  3. 腳本執行命令僅在單個GameObject的範圍內強制執行,還是考慮所有GameObjects?
+0

我想告訴你,你可以很容易地得到你的答案,一個基本的幾個對象,腳本和兒童設置,然後我意識到你發佈的問題的答案。現在我的問題出現了,因爲這是一個相當簡單的答案的微不足道的問題,爲什麼要問? – Everts

+0

這是一個多年來一直困擾着我的問題,現在我終於進行了測試,我認爲這可能值得分享,因爲我無法找到關於SO的任何書面答案。我相信這是造成很多人頭痛的原因,特別是在重新加載場景時訂單可能會改變的事實。就像「昨天晚上我關閉它時它工作一樣,爲什麼今天它不工作?」 –

+0

我想說,如果你需要對象A發生在對象B之前,你有一個關係,所以你不能再依靠Unity更新系統,而A必須調用B.你自己說過,重新加載可能會改變順序,所以知道下次可能會出錯,這意味着如果您繼續依賴Unity Update知道它將在某一天失敗,那麼您就可以做到這一點。 – Everts

回答

3

我在Unity中構建了一個小型測試項目,基本上由一個3x3x3的GameObjects樹組成,每個樹都有3個腳本。

我發現下面的答案:

  1. 號有些GameObjects可以認爲他們的父母面前,而一些家長他們的孩子之前被考慮。重新加載場景或操作場景圖時,此順序可能會發生變化。
  2. 編號兄弟姐妹可以按任意順序更新。重新加載場景或操作場景圖時,此順序可能會發生變化。
  3. 它在場景中的所有GameObjects上執行。如果SEO將腳本A設置爲在腳本B之前執行,則在腳本B的任何實例之前將考慮腳本A的所有實例。也就是說,在任何B調用其Awake()之前,A的所有實例都調用其Awake(),則在B的任何實例調用它們的Start()等之前,A的所有實例都調用它們的Start()
+0

這可能也有用:http://docs.unity3d.com/Manual/class-ScriptExecution.html –