Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 15,00€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
casin

(Ayuda) No mantener pulsado un botón

Recommended Posts

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! :)

Share this post


Link to post
Share on other sites

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! :)

Share this post


Link to post
Share on other sites

Con los event haz algo asi (no me acuerdo bien la sintaxis)

OnClick()

if(click==false)

//acciones

click = true;

OnClickUp()

click = false;

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

×
×
  • Create New...