Noticias

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

(Ayuda) No mantener pulsado un botón

Iniciado por casin, Julio 08, 2015, 06:01:58 PM

Tema anterior - Siguiente tema
Buenas a todos, a ver si me pueden ayudar! Llevo varios días intentandolo de solucionar. Es una escena de prueba para seguir aprendiendo en el cual tengo cuatro UI Button y un script en el cual muevo un cubo en una dirección, según el botón que pulse (Arriba, abajo, derecha, izquierda). 

El problema es que solo quiero que se mueva el cubo una sola vez al pulsar el botón (La posición x o y + 1), pero si mantengo pulsado un botón, el cubo se sigue moviendo hasta que lo deje de pulsar.

¿Cómo puedo hacer para que no se mantenga el botón pulsado y solo acepte un solo toque? o ¿Cómo hacer para que el cubo solo se mueva una sola vez aunque mantenga pulsado el botón?

Aquí dejo el script:

 

private bool derecha = false;
private bool izquierda = false;
private bool arriba = false;
private bool abajo = false;
private bool aumentar = false;
private bool disminuir = false;
float lerpTime;
float currentLerpTime;
float perc = 1;

Vector3 startPos;
Vector3 endPos;
 
void Update ()
{
   if (derecha || izquierda || arriba || abajo) {
      if(perc == 1){
         lerpTime = 1;
         currentLerpTime = 0;
      }
   }
 
   if(derecha && gameObject.transform.position == endPos)
   {
      endPos = new Vector3(transform.position.x + 1, transform.position.y,transform.position.z);
   }
   
   if (izquierda && gameObject.transform.position == endPos)
   {
      endPos = new Vector3(transform.position.x - 1, transform.position.y,transform.position.z);
   }
   
   if (arriba && gameObject.transform.position == endPos)
   {
      endPos = new Vector3(transform.position.x, transform.position.y,transform.position.z + 1);
   }
   
   if (abajo && gameObject.transform.position == endPos)
   {
      endPos = new Vector3(transform.position.x, transform.position.y,transform.position.z - 1);
   }
   currentLerpTime += Time.deltaTime * 5.5f;
   perc = currentLerpTime / lerpTime;
   gameObject.transform.position = Vector3.Lerp (startPos,endPos,perc);
}

/******************** FUNCIONES PÚBLICAS ********************/

public void MoverDerecha()
{
   derecha = true;
}

public void MoverIzqda()
{
   izquierda = true;
}

public void MoverArriba()
{
   arriba = true;
}

public void MoverAbajo()
{
   abajo = true;
}

public void Detener()
{
   derecha = false;
   izquierda = false;
   arriba = false;
   abajo = false;
}

public void AumentarEscala()
{
   aumentar = true;
}

public void DisminuirEscala()
{
   disminuir = true;
}

public void DetenerEscala()
{
   aumentar = false;
   disminuir = false;
}

Espero que me haya explicado bien.

Muchas gracias y saludos!

"do while", o puedes hacer que el UI Button tenga la opcion de ButtonDown o ButtonUp del TriggerEvent!

Un boleano que interrumpir el imput y lo reseteas con imput.GetKeyUp()...

El UI button ya tiene puesto un PointerDown y otro PointerUp que detiene el movimiento, pero el cubo ya se ha movido mucho en ese tiempo. Lo que yo quiero hacer es que el cubo solo se mueva un +1 en la posición x o y según el boton que estés pulsando (aunque estés presionando durante todo el tiempo el botón solo se tendría que mover un pasito), como el juego de Crossy Road, que cada vez que pulsas la pantalla da un saltito hacia delante, y aunque dejes el dedo pulsado no salta más hasta que le vuelvas a dar otro toque.
 
Espero haberme expresado bien lo que quiero conseguir.
 
Y como es eso del inpur.GetKeyUP()...?
 
 
Muchas gracias por la ayuda! 

Con los event haz algo asi (no me acuerdo bien la sintaxis)
OnClick()
if(click==false)
    //acciones
    click = true;
OnClickUp()
    click = false;

Solucionado! Muchas gracias a los dos por ayudarme!  Ahora puedo seguir con el juego. 
 
Dejo el código terminado:

private bool derecha = false;
private bool izquierda = false;
private bool arriba = false;
private bool abajo = false;
private bool aumentar = false;
private bool disminuir = false;
float lerpTime;
float currentLerpTime;
float perc = 1;

Vector3 startPos;
Vector3 endPos;

void Update ()
{
   if (derecha || izquierda || arriba || abajo) {
      if(perc == 1){
         lerpTime = 1;
         currentLerpTime = 0;
      }
   }
   startPos = gameObject.transform.position;
   currentLerpTime += Time.deltaTime * 5.5f;
   perc = currentLerpTime / lerpTime;
   gameObject.transform.position = Vector3.Lerp (startPos,endPos,perc);
}

/******************** FUNCIONES PÚBLICAS ********************/

public void MoverDerecha()
{
   derecha = true;
   endPos = new Vector3(transform.position.x + 2, transform.position.y,transform.position.z);
}

public void MoverIzqda()
{
   izquierda = true;
   endPos = new Vector3(transform.position.x - 2, transform.position.y,transform.position.z);
}

public void MoverArriba()
{
   arriba = true;
   endPos = new Vector3(transform.position.x, transform.position.y,transform.position.z + 2);
}

public void MoverAbajo()
{
   abajo = true;
   endPos = new Vector3(transform.position.x, transform.position.y,transform.position.z - 2);
}

public void Detener()
{
   derecha = false;
   izquierda = false;
   arriba = false;
   abajo = false;
}

Solo hay que ponerlo en el objeto que quieras que se mueva y crear unos UI Button con Event Trigger para crear el botón del movimiento.

Etiquetas: