Noticias

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

Temas recientes

My sistema de boleanas no funciona muy bien.

Iniciado por Quaternion, Julio 18, 2019, 10:09:52 PM

Tema anterior - Siguiente tema
Julio 18, 2019, 10:09:52 PM Ultima modificación: Julio 18, 2019, 10:13:02 PM por Quaternion
Hola a todos!
 
Esto es lo que estoy intentando hacer:
 
 
 
1- If "BoolTimerList1" es true y cuando "TimerList1 " es == -0.01f  entonces "BoolTimerList1" es falso y  "BoolTimerList2" es true.
 
2-If "BoolTimerList2" es true y cuando "TimerList2 " es == -0.01f entonces  "BoolTImerList2" is false and "BoolTimerList3" es true.
 
3- If "BoolTimerList3" es true y cuando "TimerList3" es == -0.01f entonces "BoolTimerList3" is false and "BoolTimerList4" es true.
 
4-If "BoolTimerList4" es true y cuando "TimerList4" es == -0.01f entonces "BoolTimerList4" is false and "BoolTimerList1" es true.
 
 
 
Pero tengo un problema:
 
Cuando "TimerList3" es == -0.01f no se desactiva.. por lo tanto "BoolTimer4" no puede ser true.
 
 
 
¿Que debería suceder?
 
"timerList3" debería desactivarse y "BoolTImer4" activarse.
 
 
 
VIDEO QUE MUESTRA EL PROBLEMA:  https://drive.google.com/open?id=1T638dzP8Z4F0q-Hi8BNOcQ3nPa_L3ysJ
 
 
 
ESTE ES MI CODIGO: https://hatebin.com/wqihjeegqt
 
**Solo teneis que fijaros desde las lineas 58 hasta la linea 129 que es donde se encuentran las boleanas**
 
¿Como puedo solucionar este problema?
 
Espero que este problema se pueda solucionar, Un saludo!!

No he visto el código. Independientemente por el hecho de que hacer una lista de if's es muy poco legible, estás comparando valores float que nunca serán exactos entre si.

No estás haciendo correctamente la lógica de los IF's de los TimerList. Mejor reestructura completamente el código de nuevo. Si organizas todo como una clase o estructura propia, y luego haces una colección de varias de ellas, te saldrá mejor...

Julio 22, 2019, 12:41:12 AM #3 Ultima modificación: Julio 22, 2019, 12:41:51 AM por Igor
cuidado con los float...
 
si le dices a un float "eres 0.01f" seguramente no sea 0.01f sino 0.010001f... o cualquier otra cantidad rara parecida...
 
pon un Debug.Log() para ver que cifra es exactamente ese float...
 
...y te aconsejo que en vez de comprobar si es == 0.01f compruebes si es < 0
 
eso deveria funcionar...
 
 

Buenas Quaternion. A ver, tu caso en concreto no se si lo podré resolver, aunque lo que te han dicho por arriba de que cambies los  "if (TimerList2 == -0.01f) " por "if (TimerList2 <= 0.01f) podría ayudar.


No obstante viendo tu codigo he visto algunas cosillas que te pueden ser útiles.


Para empezar cuando defines booleans al principio, no hace falta que pongas que todos son falsos, ya que siempre lo son por defecto, ademas, luego en el Start te aseguras de que lo sean, asi que es redundante, con poner:
 


public bool BoolTimerList1 , BoolTimerList2 , BoolTimerList3, BoolTimerList4 ;


Mas que suficiente.
 
Ademas puedes probar a jugarlo con CASE, yo una vez lo usé para un caso similar y me sirvió, no recuerdo como era exactamente pero vamos:, te dejo un tutorial por aquí:

 
 


   
eature=oembed" width="480">

 
 
 
¡Suerte!

Cita de: Quaternion date=1563480592¿Como puedo solucionar este problema?
   


Andate al inspector, poné arriba modo Debug, al lado del candado. Dale play y revisá todas las variables, si todo pasa muy rápido andate a ProjectSettings/Time y reducí la escala temporal.
 
Del código, si tenés varios ifs sospechá que algo va por mal camino (a la larga va a ir seguro), lo mejor es manejarte por estados si podés o tratar de crearte una clase a parte (C#) que te organice todo un poco.
 
Por ej (no digo que ande, es una pequeña modificación) con esto podés configurar cada timer, chequear si llegan a la cuenta y resetearlos:
 
https://hatebin.com/qnmglgfcrk
 
Las 4 bools las cambié por un int, ya que siemrpe tenés uno en true y el resto el false.
 
Cita de: Igor date=1563748872..y te aconsejo que en vez de comprobar si es == 0.01f compruebes si es < 0
   


Yo también pensé en eso, pero como ambos floats se representan igual la comparación debería ser correcta (si es que antes impone que sea = -0.01f) ... y ya que está pregunto, @Quaternion por qué el "-0.01f" ?? hace de reset?

Etiquetas: