Puis-je charger des données en arrière-plan pendant que l'écran de démarrage Unity est activé? Si c'est le cas, comment?
J'essaie d'exécuter du code pendant l'écran de démarrage, pas seulement de charger des actifs.
Je n'ai trouvé aucune information à ce sujet dans Google ou dans la documentation Unity .
Réponses:
Je viens de faire quelques tests et j'ai découvert que le constructeur des objets de la première scène était en fait appelé alors que l'écran de démarrage était toujours affiché.
Voici quelques timings que j'ai mesurés avec un chronomètre statique:
Il semble donc que nous pouvons déclencher un script pour qu'il s'exécute près de 3 secondes avant la fin de l'écran de démarrage (avec les paramètres par défaut) en le déclenchant depuis le constructeur. Vous pouvez essayer de déclencher votre code de chargement (éventuellement sur son propre thread) à partir de là.
Sachez simplement que cela est probablement appelé depuis le thread de chargement, donc comme nous ne sommes pas sur le thread principal, nous serons un peu plus limités avec ce que nous sommes autorisés à faire ici. S'il y a une chose spécifique que vous essayez de faire qui n'est pas prise en charge sur le fil de chargement, pensez à publier une nouvelle question avec les détails de votre application et nous pouvons essayer de trouver une solution de contournement pour ce cas.
la source
Update()
tick 2,9 secondes après le tir du constructeur. C'est à peu près tout ce que je peux discerner avec l'instrumentation actuelle.Votre meilleur pari est de créer votre propre écran de chargement et de le définir comme scène initiale. Ensuite, à partir de cette scène simple, utilisez le gestionnaire de scènes pour charger la scène suivante en arrière-plan, de manière asynchrone .
Je ne trouve aucune information pour le confirmer, mais d'après mon observation, il semble que Unity charge votre scène initiale pendant que l'écran de démarrage est affiché.
Sur certaines plates-formes, le jeu commence à s'exécuter avant que l'écran de démarrage ne disparaisse, si le chargement est assez rapide.
Tout cela peut changer à tout moment, sur toute plateforme, sur toute mise à jour de version. Il n'y a aucune garantie que cela soit cohérent, il est donc préférable d'utiliser votre propre écran de chargement.
la source
La réponse courte est non , vous ne pouvez pas faire ça.
Les deux réponses ci-dessus sont correctes en termes de gestion de scène. Vous pouvez utiliser Scene Manager pour charger la scène et comme il s'agit de la synchronisation, vous pouvez exécuter d'autres codes en parallèle.
Consultez la documentation de SceneManager.LoadScene pour plus de détails.
Le plus proche possible de l'exécution de votre code le plus rapidement possible après le démarrage du jeu est de l'exécuter à partir de la première scène avec une empreinte minuscule. Appelons ça Splash Scene . La seule chose qu'il contiendrait est votre image de démarrage et votre contrôleur exécutant le code nécessaire et chargeant une autre scène.
Puisqu'il a une faible empreinte, il se chargera très rapidement et fera ainsi fonctionner votre code presque instantanément. Vous pouvez ensuite faire ce que vous avez à faire et charger ensuite Autre scène .
Une autre chose que vous pouvez essayer est de supprimer "écran de démarrage", de supprimer toutes les images que vous souhaitez y afficher. Ce sera juste un peu plus rapide car il ne sera pas chargé initialement.
Donc, le flux serait quelque chose comme ceci:
Plus la scène est petite, plus elle se charge rapidement. Vous pouvez utiliser quelque chose comme un contrôleur Splash attaché à n'importe quel objet dans l' écran Splash chargé .
la source