Jump to content
Mcloud

Movimiento horizontal de texto (tipo Star Wars)

Recommended Posts

Muy buenas, 

Nada como un buen confinamiento en casa para poder retomar los proyectos para los que antes no había tiempo...asi que retomo mi juego, igual debo volver a presentar....bueno, espero que todos bien, y mas ahora.

Estoy haciendo la pantalla de créditos, quisiera saber cual es la mejor manera, tengo muchos agradecimientos que dar y no me caben en un texto fijo, entiendo que lo mejor es guardarlo en un txt mismamente y de ahi ir leyendo, pero como hago para que el texto vaya pasando solo sin tener que hacer scroll manual?

Muchas gracias!

Share this post


Link to post
Share on other sites

Utiliza un scrollrect para el contenido y luego ves modificando el verticalnormalizedposition.

Share this post


Link to post
Share on other sites
18 hours ago, iRobb said:

Utiliza un scrollrect para el contenido y luego ves modificando el verticalnormalizedposition.

Buenas, 

he hecho como dices, primero he creado un panel con un Mask, dentro un GameObject con el scrollrect y debajo de este un Text, va todo bien, con el raton pulso y se mueve bien en vertical y solo se ve en la zona que quiero, pero a la hora de automatizarlo no lo consigo, en las ultimas pruebas me ha quedado asi:

public void AbreVentanaCreditos()
    {        
        if (ventanaCreditos.enabled)
        {            
            ventanaCreditos.enabled = false;
        }
        else
        {            
            ventanaCreditos.enabled = true;            
            StartCoroutine(MueveCreditos());
        }
    }    
    IEnumerator MueveCreditos()
    {
        while (ventanaCreditos.enabled)
        {
            yield return new WaitForSeconds(0.5f); //Tiempo de espera entre letras.
            creditos.GetComponent<ScrollRect>().verticalNormalizedPosition = 0.01f;
        }
    }

Cuando le doy al boton de "Creditos" en el juego llamo a "AbreVentanaCreditos" al pasar el tiempo establecido el texto pasa al final directamente, mi intencion es que pase poco a poco, pero no veo la forma....

Muchas gracias!

Share this post


Link to post
Share on other sites

verticalNormalizedPosition deberia contener un valor de 0-1 donde 0 es la posición final.

Si quieres lograr un desplazamiento automatico podrias hacer lo siguiente

IEnumerator MueveCreditos()
{
  ScrollRect rect = creditos.GetComponent<ScrollRect>();
  rect.verticalNormalizedPosition = 1;
  while (ventanaCreditos.enabled && rect.verticalNormalizedPosition > 0.01f)
  {
    rect.verticalNormalizedPosition -= Time.deltaTime; 
    yield return null; //Tiempo de espera entre letras.
  }
  
  rect.verticalNormalizedPosition = 0;
}

 

Share this post


Link to post
Share on other sites
5 minutes ago, francoe1 said:

verticalNormalizedPosition deberia contener un valor de 0-1 donde 0 es la posición final.

Si quieres lograr un desplazamiento automatico podrias hacer lo siguiente


IEnumerator MueveCreditos()
{
  ScrollRect rect = creditos.GetComponent<ScrollRect>();
  rect.verticalNormalizedPosition = 1;
  while (ventanaCreditos.enabled && rect.verticalNormalizedPosition > 0.01f)
  {
    rect.verticalNormalizedPosition -= Time.deltaTime; 
    yield return null; //Tiempo de espera entre letras.
  }
  
  rect.verticalNormalizedPosition = 0;
}

 

Francoeeee!!! totalmete mil gracias!!!!!!!! ya va perfecto!!!  iRobb gracias a ti tambien!!

Share this post


Link to post
Share on other sites

Yo para este asset utilicé una mask sola:

 

Quizás un scroll hubiera sido más apropiado :'(

Edited by lightbug

Share this post


Link to post
Share on other sites
1 hour ago, lightbug said:

Yo para este asset utilicé una mask sola:

 

Quizás un scroll hubiera sido más apropiado :'(

Pues no se si mas apropiado o no, pero están fenomenal, lo no consigo que el movimiento sea fluido, me va a saltos....le he puesto una espera antes para que no empiece a moverse nada mas abrir, pero luego nada, va pinzao y ademas de los aqui presentes hay bastante gente a la que darle las gracias...asi la tengo ahora "secs" he probado desde 0.1f en adelante casi todos creo...pero nada, no doy con la tecla...

IEnumerator MueveCreditos(float secs)
    {
        ScrollRect rect = creditos.GetComponent<ScrollRect>();
        rect.verticalNormalizedPosition = 1;
        yield return new WaitForSeconds(1);
        while (ventanaCreditos.enabled && rect.verticalNormalizedPosition > 0.1f)
        {
            rect.verticalNormalizedPosition -= Time.deltaTime;
            yield return new WaitForSeconds(secs);            
        }
        rect.verticalNormalizedPosition = 0;
    }

 

Share this post


Link to post
Share on other sites
12 minutes ago, iRobb said:

Ponle un Waitforendofframe mejor

en vez waitforseconds?  asi solo con eso se pasan volando...

Listo, le he cambiado "rect.verticalNormalizedPosition -=" por un valor en vez del Time.deltaTime

   IEnumerator MueveCreditos(float secs)
    {
        ScrollRect rect = creditos.GetComponent<ScrollRect>();
        rect.verticalNormalizedPosition = 1;
        yield return new WaitForSeconds(1);
        while (ventanaCreditos.enabled && rect.verticalNormalizedPosition > 0.1f)
        {
            rect.verticalNormalizedPosition -= segundos2;
            //yield return new WaitForSeconds(secs);
            yield return new WaitForEndOfFrame();
        }
        rect.verticalNormalizedPosition = 0;
    }

Mil gracias a todos!!

  • Like 1

Share this post


Link to post
Share on other sites

Yield return Null y WaitFroEndOfFrame es excatamente lo mismo, la corrutina no volvera a iterar hasta que el bucle Update termine, por lo cual no tiene diferencia. No hice las pruebas pero lo dedusco.. 

Por otro lado deberia ver que velocidad necesitas y interpolar los valores, lo mio fue un simple ejemplo, pero verticalNormalizedPosition deberia ser asignado con un valor interpolado para que funcione de forma Smooth.

Deberas tener presente el STEP del tiempo, este puede varia con el contenido, digamos que un scroll de un contenido de 100 palabras no es igual de "sensible" que 10000

Share this post


Link to post
Share on other sites
2 hours ago, Mcloud said:

Pues no se si mas apropiado o no, pero están fenomenal,

Gracias.

1 hour ago, francoe1 said:

Deberas tener presente el STEP del tiempo, este puede varia con el contenido, digamos que un scroll de un contenido de 100 palabras no es igual de "sensible" que 10000

Me parece que por esto no utilicé el scrollrect.

Para detectar el final simplemente comparé la posición de los créditos con la de la máscara, cuando este valor superaba tal "y" de referencia de llamaba un evento.

Share this post


Link to post
Share on other sites
29 minutes ago, lightbug said:

Gracias.

Me parece que por esto no utilicé el scrollrect.

Para detectar el final simplemente comparé la posición de los créditos con la de la máscara, cuando este valor superaba tal "y" de referencia de llamaba un evento.

Puede ser, en uno de los proyecto me toco desarrollar UI (lo cual odio con todo el corazón) tuve bastantes problemas con la UI, los Anchored, las posiciones, las escalas, etc. La verdad es que la implementación de Unity tiene cosas que toda la vida fueron "normales" mezclada con ideas raras. Como por ejemplo el PIVOTE de un elemento JAMAS deberia ser dinamico y siempre deberia esta situado en la esquina superior izquierda, esto genera una inconsistencia con los Anchored que es muy desagradable, crear algo que funcione con UI relacionado a Animaciones es un DOLOR de HUEVO. 

Creo que ElementUI si se termina de desarrollar con WebKit como referencia va a llevar al exito a Unity, pero si siguen haciendo esto de seudo soluciones entonces empezara a caer por su peso. En lo personal ya me estan pidiendo conocimientos en Unreal con la intención de que los nuevos proyectos esten basados en este motor y abandonar Unity por el momento.

 

¡LO ANTERIOR FUE UN DESCARGO!

En lo personal creo que la mejor opción es usar mascaras, el SCROLL hace un CALCULO ridiculo para calcular el SIZE de KNOB lo cual no tiene ningun sentido. En este caso no se utilizara ScrollBar, por lo que una Mascara para el contenido y calculando el OFFSET para saber cuando la posición es la final es mas que suficiente!

Tambien hay que tener cuidado donde pones esto de los TITULOS por que estas forzando la actualización del MESH constantemente.

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...