Die Unity Manual beschreibt die Reihenfolge, in der die Script-Funktionen aufgerufen werden. Ich habe mich jedoch gefragt, ob es Regeln bezüglich der Reihenfolge gibt, in der die GameObjects selbst in Unity betrachtet werden.GameObject Update-Reihenfolge in Unity
GameObjects sind im Grunde die Knoten des Szenengraphen von Unity und bilden (unter der Annahme, dass die Szene selbst der Wurzelknoten war) einen Baum. Ich habe mich gefragt, ob diese Baumstruktur irgendwelche Regeln in der Reihenfolge auferlegt, in der GameObjects berücksichtigt werden.
Wie bereits erwähnt, beschreibt das Handbuch, dass Awake()
immer vor Start()
aufgerufen wird, die immer vor dem ersten Aufruf an Update()
und so weiter aufgerufen wird. Diese zeitlichen Beziehungen sind jedoch (meistens) im Rahmen eines einzelnen Skripts auf einem einzigen GameObject gegeben. Ich möchte wissen, ob es auch eine Regel gibt, die die Reihenfolge angibt, in der Start()
(oder eine andere Methode) für alle GameObjects in der Szene aufgerufen wird.
Insbesondere wollte ich wissen:
- Sind Eltern immer ihre Kinder gelten vor?
- Werden Geschwister in der Reihenfolge betrachtet, in der sie im Szenegraphen angezeigt werden?
- Wird die Skriptausführungsreihenfolge nur im Rahmen eines einzelnen GameObject erzwungen, oder werden alle GameObjects berücksichtigt?
Ich sollte Ihnen sagen, dass Sie Ihre Antwort mit einer grundlegenden Einrichtung von wenigen Objekten, Skripten und Kindern leicht erhalten können, dann habe ich bemerkt, dass Sie die Antwort mit der Frage gepostet haben. Jetzt kommt meine Frage, denn das ist ein triviales Problem mit einer ziemlich einfachen Antwort, warum fragen? – Everts
Es ist ein Problem, das mich seit Jahren heimsucht und jetzt, wo ich es schließlich getestet habe, dachte ich, es könnte sich lohnen, es zu teilen, da ich keine dokumentierte Antwort auf SO finden konnte. Ich bin mir sicher, dass es vielen Leuten Kopfschmerzen bereitet hat, vor allem die Tatsache, dass sich die Reihenfolge ändern kann, wenn man die Szene neu lädt. Wie "es funktionierte, als ich es letzte Nacht schloss, warum funktioniert es heute nicht?" –
Ich würde sagen, wenn Sie Objekt A vor Objekt B benötigen, haben Sie eine Beziehung, so dass Sie sich nicht mehr auf das Unity-Update-System verlassen können und A muss B anrufen. Sie haben es selbst gesagt, das Neuladen kann die Reihenfolge ändern. Wenn Sie also wissen, dass es beim nächsten Mal falsch sein könnte, bedeutet dies, dass wenn Sie sich weiterhin darauf verlassen, dass Unity Update weiß, dass es eines Tages scheitern wird, Sie es tun werden. – Everts