Unity Spain

Mesa de ayuda => Unity3D => Scripting => Mensaje iniciado por: BlackBloodGC en Febrero 19, 2019, 12:43:48 AM

Título: While congela Unity
Publicado por: BlackBloodGC en Febrero 19, 2019, 12:43:48 AM
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 (https://pastebin.com/XNN9peR0)
Título: While congela Unity
Publicado por: Chaskarron en Febrero 19, 2019, 10:34:20 AM
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 (https://docs.unity3d.com/ScriptReference/index.html)
 
¡¡Un saludo!!
Título: While congela Unity
Publicado por: pioj en Febrero 19, 2019, 11:26:16 AM
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. 
Título: While congela Unity
Publicado por: Chaskarron en Febrero 19, 2019, 11:40:19 AM
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.
Título: While congela Unity
Publicado por: BlackBloodGC en Febrero 19, 2019, 02:35:22 PM
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 (https://docs.unity3d.com/ScriptReference/index.html)
   
   
      ¡¡Un saludo!!
   


Gracias. He estado mirando y tendría que usar el método OnEnable()? Y si no es este  cual debería usar? 
Título: While congela Unity
Publicado por: Chaskarron en Febrero 19, 2019, 02:52:25 PM
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!!
Título: While congela Unity
Publicado por: BlackBloodGC en Febrero 20, 2019, 01:41:52 AM
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
Título: While congela Unity
Publicado por: lightbug en Febrero 20, 2019, 04:18:19 PM
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
Título: While congela Unity
Publicado por: Kvashir en Febrero 21, 2019, 09:33:27 PM
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
Título: While congela Unity
Publicado por: debug en Febrero 24, 2019, 03:57:02 PM
@BlackBloodGC otra opción era IEnumerator Start ()