Hola, acabo de realizar un videotutorial donde os muestro como realizar, con unos sencillos pasos, dos tipos de barras de progreso en UNITY, las cuales podéis añadir a vuestros proyectos. La verdad es que quedan bastante bien.
Espero que os guste.
Saludos.
eature=oembed" width="480">
Esta muy bueno! Lo segui pero la verdad estaba mas interesado en la parte de coordinar la animacion de la barra con la carga de la escena . Sabes como se puede hacer eso, la verdad nunca ni si quiera investigue al respecto.
Cita de: lightbug date=1484004757Esta muy bueno! Lo segui pero la verdad estaba mas interesado en la parte de coordinar la animacion de la barra con la carga de la escena . Sabes como se puede hacer eso, la verdad nunca ni si quiera investigue al respecto.
Para eso se hace con la función SceneManager.LoadSceneAsync . Y tienes que llamarla dentro de una corutina.
Mas info : https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html (https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html)
Cita de: JavierUnity date=1484206168Para eso se hace con la función SceneManager.LoadSceneAsync . Y tienes que llamarla dentro de una corutina.
Mas info : https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html (https://docs.unity3d.com/ScriptReference/SceneManagement.SceneManager.LoadSceneAsync.html)
Aja, con la variable progress del AsyncOperation devuelto por LoadSceneAsync, nunca invenstigue la verdad, muy facil resulto ser.
Concretamente, te interesa leer esta variable:
https://docs.unity3d.com/ScriptReference/AsyncOperation-progress.html (https://docs.unity3d.com/ScriptReference/AsyncOperation-progress.html)
SceneManager.LoadSceneAsyn no es muy útil, En muchos juegos la mayoría de la carga de datos y objetos se realiza en el Start. Por lo que el tiempo de existencia de una barra de progreso en la carga previa de una escena es insignificante. Lo ideal seria poder usar una barra de progreso dentro de la ejecución de Start. Por lo que entiendo SceneManager.LoadSceneAsyn solo carga la escena pero no la inicia. Muchos objetos e imágenes se podrían estar cargando después de cargar la escena, lo cual complica mucho las cosas. Supongo que este caso solo serviría para juegos que tienen la totalidad de los objetos dentro de la escena previa.
Yo en mi juego me he limitado a poner una barra de carga "fake", la hago progresar a una velocidad randomizada y pongo paradas así como si estuviera sincronizada con el proceso de carga. Sé que es una chapuza pero oye, da el pego, y en esto de hacer videojuegos muchas veces es de lo que se trata, de transmitirle al usuario una ilusión aunque por detrás lo que está pasando no tenga nada que ver :)
Si, seria una buena solución, aunque yo estoy mas acostumbrado a ofrecer datos reales. Podría poner un control en un script especial y luego anularlo cuando termine, pero es un lió meter toda la carga del proyecto en un Update, esperar que termine y luego iniciar el juego Teniendo en cuenta que los objetos tienen que estar ordenados de una manera determinada para no hacer referencia a una estancia que no existe.. Ese es el problema de usar tantos procesos paralelos. Si fuera todo lineal secuencial, seria mas fácil. Por otra parte hay una largo tramo donde las interfaces no funcionan y se quedan estáticas. Otra solución seria en ese caso usar un programa independiente para mostrar el progreso "otro lío", así que poner un texto de "Cargando espere... con una imagen de fondo..," es mi solución en este caso, ya que el tiempo de congelado de pantalla es superior al tiempo de carga :)
Igual me parece que si se va a poner una barra de carga se tiene que tener en cuenta que el juego debe ser grande, complejo, etc. No pondria una de ellas en un tetris y luego hacerla fake.
Barras de carga fake? Omfg jajaja creo que a partir de Unity 5 se pueden fusionar escenas osea que eso solucionaría el problema de los starts... (Congelando la barra de carga en el 99% como en la mayoría de juegos jajajaja)