Índice del curso de Unity 3D

  1. Introducción
  2. Instalación
  3. Interfaz
  4. Conceptos básicos
  5. Ejercicio: cubos
  6. Cambiar el color de algo
  7. Introducción a C#
  8. Conceptos para realización de juegos 2D
  9. Acceder a componentes desde código
  10. Uso del transform
  11. User Interface
  12. Elije tu propia aventura
  13. Acierta imagen
  14. Sprites
  15. Fall Down Game
  16. Galería de tiro
  17. Corrutinas
  18. Flappy Bird
  19. PONG
  20. Carreras
  21. Panel Animator
  22. Plataformas
  23. Plataformas
  24. Puzzle con Raycast
  25. Plataformas con RayCast
  26. Memory (juego de las parejas)
  27. Guardar y recuperar información almacenada
  28. Máscara
  29. Publicación
  30. Ejercicio: First Person Shooter
  31. Multijugador con Photon

Máscara en Unity 3D

Sin código

Añadimos a un panel un componente de máscara. Cuando el componente de máscara esté activo, sólo se verá la parte de sus hijos que estén ubicados dentro.

Con animación

La siguiente corrutina hace que la máscara se despliegue

public RectTransform panel;

	IEnumerator Desplegar(){
	float t = 0;

	while (t <= 1) {
		t += 0.1f;
		panel.offsetMin = new Vector2 (panel.offsetMin.x, Mathf.Lerp(306, 0, t));
		yield return new WaitForSeconds (0.05f);
	}
	yield return null;
}

Ejercicio

Escribir una corrutina para que la máscara se repliegue.

Swipe panel

Sin código

Debo crear la siguiente jerarquía de paneles:

  • Viewport (Con el componente Scroll Rect asociado, tendrá el ancho de la pantalla)
    • Content (tendrá el ancho de todos los paneles que contiene)
      • panel1
      • panel2

Con ajuste repentino al inicio

public ScrollRect scrollRect;

void Start () {
	scrollRect.horizontalNormalizedPosition = 1;	
}

Con ajuste repentino al moverme

void Update(){
	if(Input.GetMouseButtonUp(0)){
		snap ();
	}
}

void snap(){
	float valorActual = scrollRect.horizontalNormalizedPosition;
	valorActual = Mathf.Round (valorActual);
	scrollRect.horizontalNormalizedPosition = valorActual;
}

Con Ajuste animado

Para que al soltar el panel este no tiemble, a la propiedad Movement Type del componente Scroll Rect el valor Clamped, en lugar de Elastic.

void Update(){
	if(Input.GetMouseButtonDown(0)){
		//Si vuelvo a pulsar, cancelo la corrutina anterior para que no se me amontonen corrutinas/*
		StopCoroutine ("Transicion");
	} else if(Input.GetMouseButtonUp(0)){
		snap ();
	}
}

void snap(){
	float valorFinal = scrollRect.horizontalNormalizedPosition;
	Debug.Log ("Valor final: " + valorFinal);
	int cantidadPosiciones = 3;

	valorFinal = Mathf.Round (valorFinal * (cantidadPosiciones-1)) / (cantidadPosiciones-1);
	StartCoroutine ("Transicion", valorFinal);
}

IEnumerator Transicion(float valorFinal){
	float valorInicial = scrollRect.horizontalNormalizedPosition;

	float incremento = (valorFinal > valorInicial) ? 0.01f : -0.01f;

	float direccion = valorInicial - valorFinal;

	while (true){
		valorInicial += incremento;
		if (Mathf.Sign(direccion) != Mathf.Sign(valorInicial - valorFinal)) break;
		scrollRect.horizontalNormalizedPosition = valorInicial;
		yield return new WaitForSeconds(0.05f);
	}
//Los últimos pixeles, los ajustamos a la fuerza
scrollRect.horizontalNormalizedPosition = valorFinal;
}
icono de mandar un mailPreguntame lo que quieras!
Pablo Monteserín
contacta conmigoPablo Monteserín

El servicio de resolución de dudas técnicas es sólo para los usuarios premium. Si tienes cualquier otra duda, usa el formulario de contacto. ¡Gracias!