Cita de: lightbug date=1566959924Cuando apretás el botón izq y no está corriendo se da la primer vuelta (el else), es decir que se pone corriendo = true. En el siguiente cuadro GetMouseButtonDown no se dispara (por razones obvias) entoces el "if(corriendo)" no se da. Sí se va a dar el "if(corriendo)" en el proximo click. Además, ¿quién pone corriendo en false?
Y volviendo al punto 1, solo si corriendo es falso la velocidad aumenta. Una vez que diste click izquierdo corriendo nunca vuelve a false (?). Puede ser que me haya olvidado de algo, muchas veces contesto a la ligera.
@lightbug, sí efectivamente. Solo si está corriendo puede aumentar la velocidad y nunca vuelve a false, hasta que se cae o toca una bomba (fin de juego). Muchas gracias por la ayuda, lo del script para leer inputs es una gran idea.
Cita de: Antonio date=1566851072Una manera rápida de arreglarlo es en vez de usar GetMouseButtonDown, utilizar simplemente GetMouseButton, su función es la misma, sólo que esta siempre se activa mientras el botón esté siendo pulsado, mientras que GetMouseButtonDown y GetMouseButtonUp, sólo se activan en los momentos de transición. (Son bastante útiles, pero quizás no en esta situación).
Otra posibilidad, es cambiar el valor de la variable velocidad cuando haces la activación de la variable corriendo.
Tutorial arriba, tutorial abajo, me parece que es buena idea intentar hacerlo por ti mismo, es una buena práctica para aprender a resolver y racionalizar los problemas. Ya habrá tiempo de pulirlo.
Gracias Antonio, en ello estoy. El ejercicio me pide que use el GetMouseButtonDown. Ya casi lo tengo. Muchas gracias por el aporte
Cita de: Deaymon date=1566984927La solución de @lightbug es la que uso yo tal cual. A veces incluso uso un script aparte que se dedique exclusivamente a leer inputs (InputManager o algo así) y, luego, cualquier otro script que necesite saber acerca de esos inputs, use una referencia a este (InputManager).
Eso sí, lo de usar OR al asignar los inputs para acumularlos entre cada FixedUpdate; excelente añadido que me voy a copiar a partir de ahora. Gracias por el aporte.
Si, es muy buena solución, aunque pienso que nos piden algo mucho más sencilo. Gracias por contestar
Buenas a todos, al final lo solucioné de la siguiente forma:
En la parte del Update solo añadí lo siguiente:
void Update()
{
if (Input.GetMouseButtonDown(0)){
if(corriendo){
if ((enSuelo || !dobleSalto)){
sonido.Play();
//Empujón hacia arriba
//Opción 1. Metodo up de Vector2
rigi.AddForce(Vector2.up*fuerzaSalto);
//Otra opción
//Aplicamos una fuerza de 0 en X y de fuerzasalto en Y
//rigi.AddForce(new Vector2(0,fuerzaSalto));
if(!dobleSalto && !enSuelo){
dobleSalto=true;
}
}
}
else{
corriendo = true;
NotificationCenter.DefaultCenter().PostNotification(this, "PersonajeEmpiezaACorrer");
}
}
if (Input.GetMouseButtonDown(1)){
velocidad *= 1.25f;
animator.speed *= 1.25F;
if (corriendo){
}
else{
rigi.velocity = new Vector2(velocidad * 1.25f, rigi.velocity.y);
}
}
}
Al componente Animator, también le añado el mismo aumento de velocidad y ya funciona y se nota más al pulsar el botón derecho. Era sencillo, una vez que ves la lógica bien. Aunque m e quedo con lo del script para los imputs
Muchas gracias a los que habéis dedicado unos minutos en ayudarme.