Kann ich Daten im Hintergrund laden, während der Unity-Begrüßungsbildschirm geöffnet ist? Wenn das so ist, wie?
Ich versuche, Code während des Begrüßungsbildschirms auszuführen und nicht nur Assets zu laden.
Ich konnte keine Informationen dazu in Google oder der Unity-Dokumentation finden .
Antworten:
Ich habe gerade einige Tests durchgeführt und festgestellt, dass der Konstruktor für Objekte in der ersten Szene tatsächlich aufgerufen wird, während der Begrüßungsbildschirm noch angezeigt wird.
Hier sind einige Timings, die ich mit einer statischen Stoppuhr gemessen habe:
Es sieht also so aus, als könnten wir ein Skript auslösen, das fast 3 Sekunden vor dem Ende des Begrüßungsbildschirms (mit Standardeinstellungen) ausgeführt wird, indem wir es vom Konstruktor aus starten. Sie können von dort aus versuchen, Ihren Ladecode (möglicherweise in einem eigenen Thread) auszulösen.
Beachten Sie nur, dass dies wahrscheinlich vom Ladethread aufgerufen wird. Da wir uns also nicht im Hauptthread befinden, sind wir etwas eingeschränkter in Bezug auf das, was wir hier tun dürfen. Wenn Sie eine bestimmte Aufgabe ausführen möchten, die im Ladethread nicht unterstützt wird, sollten Sie eine neue Frage mit Details zu Ihrer Anwendung veröffentlichen. Wir können dann versuchen, eine Problemumgehung für diesen Fall zu finden.
quelle
Update()
Tick 2,9 Sekunden nach dem Auslösen des Konstruktors. Das ist ungefähr alles, was ich mit der aktuellen Instrumentierung erkennen kann.Am besten erstellen Sie Ihren eigenen Ladebildschirm und legen diesen als erste Szene fest. Verwenden Sie dann aus dieser einfachen Szene den Szenenmanager , um die nächste Szene asynchron im Hintergrund zu laden .
Ich kann keine Informationen finden, um dies zu bestätigen, aber meiner Beobachtung nach scheint Unity Ihre erste Szene zu laden, während der Begrüßungsbildschirm angezeigt wird.
Auf einigen Plattformen wird das Spiel gestartet, bevor der Begrüßungsbildschirm ausgeblendet wird, wenn das Laden schnell genug ist.
All dies kann sich jederzeit, auf jeder Plattform und bei jedem Versionsupdate ändern. Es gibt keine Garantie dafür, dass dies konsistent ist. Verwenden Sie daher besser Ihren eigenen Ladebildschirm.
quelle
Kurze Antwort ist nein , das können Sie nicht.
Beide obigen Antworten sind in Bezug auf das Szenenmanagement korrekt. Sie können den Szenenmanager verwenden , um die Szene zu laden, und da sie asynchron ist, können Sie anderen Code parallel ausführen.
Weitere Informationen finden Sie in der Dokumentation zu SceneManager.LoadScene .
Das Beste, was Sie tun können, um Ihren Code nach Spielbeginn so schnell wie möglich auszuführen, ist, ihn ab der ersten Szene mit geringem Platzbedarf auszuführen. Nennen wir es Splash Scene . Das einzige, was es enthalten würde, ist, dass Ihr Splash-Image und Ihr Controller den erforderlichen Code ausführen und eine andere Szene laden.
Da es nur einen geringen Platzbedarf hat, wird es sehr schnell geladen und Ihr Code wird fast sofort ausgeführt. Sie können dann tun, was Sie tun müssen, und anschließend eine andere Szene laden .
Sie können auch versuchen, "Begrüßungsbildschirm" zu entfernen, um alle Bilder zu entfernen, die Sie dort anzeigen möchten. Es wird nur ein bisschen schneller sein, da es zunächst nicht geladen wird.
Der Fluss wäre also ungefähr so:
Je kleiner die Szene ist, desto schneller wird sie geladen. Sie können so etwas wie einen Splash-Controller verwenden, der an ein beliebiges Objekt im geladenen Splash-Bildschirm angehängt ist .
quelle