Noticias

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

Area de scroll semi-infinita

Iniciado por rogerdv, Diciembre 05, 2017, 07:11:08 PM

Tema anterior - Siguiente tema
Alguien puede darme alguna sugerencia para hacer un área de scroll aparentemente infinita? Estoy usando el ScrollView que trae Unity, porque el tutorial aoficial parece que se salta un paso y nunca me funciona, pero me he encontrado algunos problemas: si el Gameobject con el content le pongo un layou y le agrego elementos, cuando se llena los textos dejan de ser visibles. Lo otro es que el content no me muestra automáticamente el último elemento agregado, solo se ven los que alcanzan el área visible.

http://dsgp.blogspot.com">Divagaciones sobre programación y juegos



Seguro que tienes una función donde agregas los objetos al content, pues la solución más fácil es hacer la alturar depender del número de objetos que tengas, es decir cuando agregues un objeto nuevo aumentas la altura del content, te dejo un script que tengo hecho más o menos para eso:
 

public void IniciarVentana (IOpciones elemento, Vector3 pos)
{
   this.gameObject.SetActive (true);
   List<Parametro> parametros = elemento.obtenerParametros ();
   if(opciones.Count<parametros.Count)
   {
      int diferencia = parametros.Count - opciones.Count;
      for(int i=0;i<diferencia;i++)
      {
         GameObject go = Instantiate (prefabBoton);
         RectTransform rt = go.GetComponent<RectTransform> ();
         rt.SetParent (transformVentana);
         rt.localScale = Vector3.one;
         BotonOpcion bo = go.GetComponent<BotonOpcion> ();
         bo.Crear (this);
         opciones.Add (bo);
      }
   }
   transformVentana.position = pos;
          //Esta es la línea que te interesa, como ves dejo el ancho como está y modifico la altura, en mi layout tengo 2 arriba, 2 abajo
          //y 2 de espaciado, de esta forma el boton me queda de 50px de alto
   transformVentana.sizeDelta = new Vector2 (transformVentana.sizeDelta.x, (52f * parametros.Count) + 2f);
         
   for(int i = 0;i<opciones.Count;i++)
   {
      if (i < parametros.Count) {
         if (!opciones .gameObject.activeSelf)
            opciones .gameObject.SetActive (true);
         opciones .Iniciar (parametros );
      } else
         opciones .gameObject.SetActive (false);
   }
}

 
La diferencia es que mi panel varía mucho entonces cacheo los botones al crearlos y activo/desactivo los que necesito.
 
 

Etiquetas: