Noticias

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

Pequeño bug

Iniciado por DavidV, Septiembre 28, 2016, 03:47:02 PM

Tema anterior - Siguiente tema
Septiembre 28, 2016, 03:47:02 PM Ultima modificación: Septiembre 28, 2016, 03:50:14 PM por DavidV
Hola, iniciando un nuevo proyecto me ha resultado un pequeño error en el que no sé si es algo general, o sólo sucede en mi pc.
 
Tengo el siguiente código:
 

void FixedUpdate () {
   if (Input.GetKeyDown(KeyCode.X)) {
      stop = !stop;
      print (stop);
   }
   switch (stop) {
   case false:
      //GetComponent<Rigidbody2D> ().velocity = Vector2.zero;
      flecha.transform.RotateAround (Aro.transform.position, -Vector3.forward, velocidadFlecha * Time.deltaTime);
      Aro.SetActive (true);
      break;
   case true:
      flechaPosition = flecha.transform.localPosition;
      //GetComponent<Rigidbody2D> ().velocity = flechaPosition * velocidad;
      Aro.SetActive (false);
      break;
   }
}
   
}

 
El error está en el if (Input.GetKeyDown(KeyCode.X)) {  stop = !stop;}, como ustedes ya saben esto cambia una variable bool de verdadero a falso y viceversa cada vez que se presiona la tecla X. Pero casi siempre, realiza dos veces la acción que se encuentra dentro de ese condicional, es decir; si era true, pasa a false y enseguida pasa nuevamente a true, cuando solo lo he presionado una sola vez, algo que por supuesto daña el resto del script.
 
¿A alguien más le ha sucedido o sólo es un problema en mi pc?, ¿Tiene esto alguna solución?
 
De antemano muchas gracias por su ayuda. 

Estudiante Ing. Sistemas 



No es un bug, el input.GetKeyDown devuelve true en el frame  que se pulso la tecla y se resetea al pasar al siguiente  frame, si lo usas en fixedUpdate se ejecutara mas de una vez en un frame.Utiliza el input.GetKeyDown en un update()

Y aparte lo va a hacer cientos de veces. Tienes que poner un timer con el deltaTime que solamente se active lo que quieras al cabo de 0.5 segundos por ejemplo.

Etiquetas: