Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Temas recientes

While congela Unity

Iniciado por BlackBloodGC, Febrero 19, 2019, 12:43:48 AM

Tema anterior - Siguiente tema
Febrero 19, 2019, 12:43:48 AM Ultima modificación: Febrero 19, 2019, 12:45:43 AM por BlackBloodGC
Hola buenas, resulta que estoy intentando hacer un juego que se ejecute hasta que ganar == false. Cuando voy a ejecutarlo y ganar == true unity se me congela. Yo creo que el código esta bien, además es extraño porque se congela incluso antes de empezar a ejecutar código. Por mi ordenador no es, i7-6700k y r9 fury.
 
Aquí el código: https://pastebin.com/XNN9peR0

Si se congela unity, entonces no esta bien, y no esta bien precisamente porque estas intentando hacer que funcione en el metodo Start, por lo tanto jamas de los jamases funcionara correctamente.

Puedes consultar la documentacion de los metodos propios del Monobehaviour en la documentacion de la API de unity
 
¡¡Un saludo!!

En mi experiencia, un consejo: Olvidaros del While para Unity3D.  Ese tipo de bucles siempre ha dado problemas, y más aún programando videojuegos. 

Todos y cada uno de los bloques de codigo son herramientas de la programacion, su funcionalidad radica en el conocimiento y aplicacion de dichas herramientas, por lo tanto, ahi estan, pero hay que saber utilizarlas correctamente. No se puede decir que algo no funciona por los inconvenientes que se producen de su incorrecta aplicacion.

Cita de: Chaskarron date=1550568860Si se congela unity, entonces no esta bien, y no esta bien precisamente porque estas intentando hacer que funcione en el metodo Start, por lo tanto jamas de los jamases funcionara correctamente.

      Puedes consultar la documentacion de los metodos propios del Monobehaviour en la documentacion de la API de unity
   
   
      ¡¡Un saludo!!
   


Gracias. He estado mirando y tendría que usar el método OnEnable()? Y si no es este  cual debería usar? 

Cita de: BlackBloodGC date=1550583322Gracias. He estado mirando y tendría que usar el método OnEnable()? Y si no es este  cual debería usar? 
   


OnEnable es para cuando el GameObject se activa en la jerarquia de la escena y comienza a estar activo, que funciona indistintamente en el editor y en la compilacion. Por otro lado, y el cual seria mas factible de usar, seria el metodo Update, que se llama cada frame de la aplicacion, pero tenemos el dilema que mientras exista un bucle en dicho metodo, unity quedara congelado mientras el bucle no se rompa. Quedaria la opcion de usar una corrutina o agregar un "listener" a cada boton con la funcion a ejecutar en caso de ser pulsado.

Te recomiendo intentar algo mas sencillo antes de abarcar temas complejos sin conocer un minimo las librerias del engine. ¡¡Saludos!!

Al final, después de unas 6 horas totales he conseguido que funcione, lo he optimizado y está totalmente terminado y sin bucle while. Era usarlo y congelarse unity. He aprendido mucho, gracias a todos

Febrero 20, 2019, 04:18:19 PM #7 Ultima modificación: Febrero 20, 2019, 04:24:49 PM por lightbug
Unity funciona frame a frame, no es la consola de C, tenés que asegurar que el flujo del programa salga del Update, si por cualquier razon se queda dando vueltas dentro de un update nunca se dará la orden de rendering, ni la de actualizacion de animators, ni la de captura de inputs... basicamente rompés el flujo del Engine. En corrutinas lo podés hacer, ya que te obligan a meter un yield justamente para delegar este control de flujo y retomarlo cuando corresponda, por ej yield return new WaitForSeconds(t) vuelve a los t segundos.
 
Resumen : tené cuidado con los while, usalos si y solo si sabés que vas a salir, y si además el efecto pasa en un frame (hablando del update).
 
 
 
Saludos

si la lógica está mal da igual que bucle uses el problema radica en que si no entiendes lo que va a pasar el while es mas fácil que genere bucle infinito que con un for

@BlackBloodGC otra opción era IEnumerator Start ()

Etiquetas: