Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
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
- Content (tendrá el ancho de todos los paneles que contiene)
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;
}