Noticias

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

Cuenta atras + Button responsive

Iniciado por fernando, Abril 25, 2017, 05:30:49 PM

Tema anterior - Siguiente tema
Abril 25, 2017, 05:30:49 PM Ultima modificación: Abril 25, 2017, 08:24:11 PM por pioj
Buenas!
 
Estoy haciendo el típico juego de flappy birds.
 
Me gustaría que antes de empezar la partida saldría la típica cuenta atrás de 3..2..1.. y luego empezara la partida.He estado intentando varias cosas pero no consigo hacerlo.
 
Como puedo hacer que salga la animación de la cuenta atrás y que el juego no empieze hasta que termine?he estado probando con corrutinas y time.timescale pero no lo consigo..Tengo hecho esto
 

void Start() {
        rigid = GetComponent<Rigidbody2D>();
        StartCoroutine(pause(1.5f));
    }

 
en el start llamo a la corrutina pause y le paso 1.5f
 
y luego en la corrutina tengo 
 

IEnumerator pause(float pause) {
        Time.timeScale = .01f;
        yield return new WaitForSeconds(pause * Time.timeScale);
        Time.timeScale = 1.0f;
    }

 
Con eso consigo que el juego espere unos seg antes de empezar,pero si hago la animación y luego en la corrutina pongo para que se destruya la animación,lo que consigo es que espere unos seg antes de empezar el juego pero no hace la animación de la cuenta atrás y al de unos seg se destruye la animación y empieza el juego.
 
Ideas??
 
 
 
Y por otro lado tengo dos botones que ocupa cada uno la mitad de la pantalla,pero depende que resolución sea,los botones se mueven enteros y quedan descuadrados,alguna idea?
 
 
 
gracias a todos de ante mano!

La pregunta es: hace la animacion o no? estas seguro, porque si tu timeScale se baja 10 veces es muy probable que tu 3...2...1 que tardaba tres segundos ponele ahora tarde 30 segundos y necesites esperar 10 segundos entre numero, como estas esperando 1.5 segundos * 0.15 segundos escalados en tiempo--> 1.5 segundos devuelta no llegas a ver el paso. Podes acelerar tu animacion de modo manual o via codigo para ver si efectivamente se reproduce o arrancar el juego y ver en el animation window si en realidad se reproduce. Podrias cambiar los frames acorde a tu escalado, si metes un timeScale de 0.1f aumenta (o reduci?) tus frames dentro del animation window en 10 veces y fijate si funciona.
 
 
 
Cita de: fernando date=1493134249Y por otro lado tengo dos botones que ocupa cada uno la mitad de la pantalla,pero depende que resolución sea,los botones se mueven enteros y quedan descuadrados,alguna idea?
   


Si son del UI primero setea los anchors, podes usar el centro de la pantalla (creo que es el default), luego si queres que todo se escale correctamente fijate en canvas scaler (un componente del canvas) que tenes la opcion (creo que hay tres, elegi la de escalado uniforme o algo asi)

Buenas, yo tengo un contador de ese tipo y lo hago cargo distintas texturas con 3, 2, 1, según los segundos.


Este es el código que uso:
 

   public Texture [] contar3;
public Renderer rend;
public float time;
void Start () {
   rend = GetComponent<Renderer>();   
   time = 0;
}

void Update () {
   time = time + 1 * Time.deltaTime;// Vamos sumando segundos a la variable time, 1 segundo por segundo.
   tiempo ();
   texturasconta ();//Llamo a la funcion para ir cambiado de textura segun la variable time.
      
}
//Funcion par que cuando la variable llegue la valor que queremos, lance en "reproducir la funcion que nos interese".
void tiempo (){
   if (time >= 3) {
      // Lo que tu quieras.
   }
}
void texturasconta (){
   if (time >= 0) {
      rend.material.mainTexture = contar3[0];
   }
      if (time >= 1) {
         rend.material.mainTexture = contar3[1];
      }
         if (time >= 2) {
            rend.material.mainTexture = contar3[2];
         }
}

 
Saludos,

Abril 29, 2017, 03:49:46 AM #3 Ultima modificación: Abril 29, 2017, 04:09:12 AM por Portief
Buenas a mi lo más elegante que se me ocurre para ese fin es algo de este estilo:
 

// Use this for initialization
void Start () {
        StartCoroutine(counter(3));
    }

// Update is called once per frame
void Update () {
   
}
    IEnumerator counter(int _counter)
    {
        Debug.Log("Empieza cuenta");
        for (int x=;x<_counter;x++)
        {
            Debug.Log("Muestras la textura que pertoque en mediante un array");
            yield return new WaitForSeconds(1);
        }
        Debug.Log("Empieza Juego");
    }

 
Tendría sentido para hacer una cuenta atrás de números enteros evidentemente

Cita de: lightbug date=1493141736La pregunta es: hace la animacion o no? estas seguro, porque si tu timeScale se baja 10 veces es muy probable que tu 3...2...1 que tardaba tres segundos ponele ahora tarde 30 segundos y necesites esperar 10 segundos entre numero, como estas esperando 1.5 segundos * 0.15 segundos escalados en tiempo--> 1.5 segundos devuelta no llegas a ver el paso. Podes acelerar tu animacion de modo manual o via codigo para ver si efectivamente se reproduce o arrancar el juego y ver en el animation window si en realidad se reproduce. Podrias cambiar los frames acorde a tu escalado, si metes un timeScale de 0.1f aumenta (o reduci?) tus frames dentro del animation window en 10 veces y fijate si funciona.
   
   
       
   
   
      Si son del UI primero setea los anchors, podes usar el centro de la pantalla (creo que es el default), luego si queres que todo se escale correctamente fijate en canvas scaler (un componente del canvas) que tenes la opcion (creo que hay tres, elegi la de escalado uniforme o algo asi)
   


Gracias lightbug ! Con lo que me dijiste pude hacer que los botones fueran responsivos ,y averigüe como solucionar la cuenta atras,exite un componente del animator que es para ignorar las corrutinas y con eso funciona todo perfecto!

Etiquetas: