¿Puedo cargar datos en segundo plano mientras la pantalla de inicio de Unity está activa? ¿Si es así, cómo?
Estoy tratando de ejecutar código durante la pantalla de inicio, no solo cargar activos.
No he podido encontrar ninguna información sobre esto en Google o en la Documentación de Unity .
Respuestas:
Acabo de hacer algunas pruebas y descubrí que en realidad se llama al constructor de objetos en la primera escena mientras todavía se muestra la pantalla de presentación.
Aquí hay algunos tiempos que medí con un cronómetro estático:
Por lo tanto, parece que podemos activar un script para que se ejecute casi 3 segundos antes del final de la pantalla de inicio (con la configuración predeterminada) disparándolo desde el constructor. Puede intentar activar su código de carga (posiblemente en su propio hilo) desde allí.
Solo tenga en cuenta que esto probablemente se llama desde el hilo de carga, por lo que dado que no estamos en el hilo principal, estaremos un poco más limitados con lo que se nos permite hacer aquí. Si hay algo específico que intenta hacer que no se admite en el hilo de carga, considere publicar una nueva pregunta con detalles de su aplicación y podemos intentar encontrar una solución para ese caso.
fuente
Update()
tic 2.9 segundos después de que el constructor disparara. Eso es todo lo que puedo discernir con la instrumentación actual.Su mejor opción es hacer su propia pantalla de carga y establecerla como la escena inicial. Luego, desde esa escena simple, use el Administrador de escenas para cargar la siguiente escena en segundo plano, de forma asincrónica .
No puedo encontrar información para confirmar esto, pero según mi observación, parece que Unity está cargando su escena inicial mientras se muestra la pantalla de inicio.
En algunas plataformas, el juego comienza a ejecutarse antes de que desaparezca la pantalla de inicio, si la carga es lo suficientemente rápida.
Todo esto puede cambiar en cualquier momento, en cualquier plataforma, en cualquier actualización de versión. No hay garantía de que esto sea consistente, por lo que es mejor usar su propia pantalla de carga.
fuente
La respuesta corta es no , no puedes hacer eso.
Ambas respuestas anteriores son correctas en términos de gestión de la escena. Puede usar Scene Manager para cargar la escena y, dado que es asíncrona, puede ejecutar otro código en paralelo.
Mire la documentación de SceneManager.LoadScene para más detalles.
Lo más cerca que puede llegar a ejecutar su código lo más rápido posible después de que comience el juego es ejecutarlo desde la primera escena con una huella pequeña. Llamémoslo Splash Scene . Lo único que contendría es que la imagen de bienvenida y el controlador ejecuten el código necesario y carguen otra escena.
Como tiene un tamaño reducido, se cargará muy rápido y, por lo tanto, su código se ejecutará casi al instante. Luego puede hacer lo que tiene que hacer y luego cargar Otra escena .
Otra cosa que puedes probar es eliminar la "pantalla de bienvenida", eliminar cualquier imagen que quieras mostrar allí. Será un poco más rápido ya que no se cargará inicialmente.
Entonces el flujo sería algo como esto:
Cuanto más pequeña sea la escena, más rápido se cargará. Puede usar algo como el controlador de bienvenida adjunto a cualquier objeto en la pantalla de bienvenida cargada .
fuente