2016-03-27 17 views
2

Unity Manualには、Script関数の呼び出し順序が記述されています。しかし、GameObject自体がUnityで考慮される順序に関するルールがあるかどうかは疑問でした。UnityのGameObject更新命令

GameObjectsは、基本的にUnityのシーングラフのノードであり(シーン自体がルートノードであると仮定して)、ツリーを形成します。私はそのツリー構造がGameObjectsが考慮される順序に何らかの規則を課しているのか疑問に思っていました。

Awake()は、常に最初にUpdate()を呼び出す前に呼び出されるStart()の前に常に呼び出されると記載されています。しかしながら、これらの関係は、(ほとんど)単一のGameObject上の単一のスクリプトの範囲内で与えられる。シーン内のすべてのGameObjectにStart()(または他の方法)が呼び出される順序を示すルールがあるかどうかを知りたいと思います。

は具体的に私が知りたいと思った:

  1. が子どもである前に、常に考慮両親はありますか?
  2. 兄弟は、シーングラフに表示されているのと同じ順序で検討されていますか?
  3. Script Execution Orderは、単一のGameObjectのスコープ内でのみ実行されますか、それともすべてのGameObjectsを考慮していますか?
+0

ほとんどのオブジェクト、スクリプト、子供の基本的な設定で簡単に答えを得ることができたと伝えました。今は私の質問が来ています。なぜなら、これはかなり簡単な答えである些細な問題ですから、なぜ尋ねるのですか? – Everts

+0

何年もの間私を傷つけていた問題で、最終的には落としてそれをテストしたので、私はSOに関する文書化された答えを見つけることができなかったので、分かち合う価値があると思った。私はそれが前に多くの人々の頭痛を引き起こしたと確信しています、特に事実は、シーンを再読み込みで変更することができます。私が昨晩閉じたときに働いたように、なぜ今日は働いていないのですか? –

+0

私は、オブジェクトBの前にオブジェクトAが必要な場合、関係があるのでUnityアップデートシステムにもう依存できず、AはBにコールしなければならないと言っています。リロードすると、次回は間違っている可能性があることを知っているので、Unity Updateに依存し続けていると、ある日失敗すると、あなたはそれをやり遂げます。 – Everts

答えて

3

私はGameObjectsの3x3x3ツリーから基本的に構成された小さなテストプロジェクトをUnityに構築しました.3つのスクリプトをそれぞれ持っています。

私は、次の答えを見つけました:両親である前に、自分の子である前に、いくつかの親が考えることができる一方、いくつかのゲームオブジェクトは、考えることができる

  1. 号。シーンをリロードしたり、シーングラフを操作したりするときに、この順序が変わる可能性があります。
  2. いいえ、兄弟は任意の順序で更新できます。この順序は、シーンをリロードしたり、シーングラフを操作したりするときに変更できます。
  3. シーン内のすべてのゲームオブジェクトに適用されます。 SEOがスクリプトBの前に実行されるスクリプトAを設定する場合、スクリプトBのインスタンスが存在する前にスクリプトAのすべてのインスタンスが検討されます。つまり、Aのすべてのインスタンスが、Awake()を呼び出す前にAwake()を呼び出すと、Aのすべてのインスタンスは、Start()というようにBのインスタンスが呼び出される前にStart()を呼び出します。
+0

これは興味深いかもしれません:http://docs.unity3d.com/Manual/class-ScriptExecution.html –