Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Argo214 en Febrero 15, 2016, 01:06:01 PM

Título: Salvar cuenta atrás entre varias escenas
Publicado por: Argo214 en Febrero 15, 2016, 01:06:01 PM
Buenas! Estoy con un juego en el que quiero crear una cuenta atrás de tiempo que se vaya manteniendo al pasar por varias escenas y que cuando llegue a cero salte a una pantalla de Gameover. Lo estoy haciendo con Playerprefs no me funciona porque al pasar de una escena a otra, en vez de comenzar partiendo del tiempo consumido en la anterior, me lleva directamente a la pantalla de Gameover. Me podéis ayudar? Dejo abajo el código que estoy utilizando:using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Tiempo : MonoBehaviour {

    public Text timeText;
    public float timer = 120.0f;

    void Start ()
    {
        
        timer = PlayerPrefs.GetFloat ("timer");
        timeText.text = "" + timer.ToString ("00:00");

    }

    void Update () {
        timer -= Time.deltaTime;
        timeText.text = "" + timer.ToString ("00:00");


        if (timer <= 0) {

            PlayerPrefs.SetFloat("timer", timer);
            Application.LoadLevel("Gameover");

        }
    }
}
Título: Salvar cuenta atrás entre varias escenas
Publicado por: hammer en Febrero 15, 2016, 01:34:50 PM
MmmmhhhhhTe creas un u prefab de un GameObject y a este gameobject le creas un script que contenga el DontDestroyOnLoad() para que se mantenga "vivo" cuando cambias de nivel.Bueno te lo escribo que me sera mas facil que explicarlo xD no vale copiar y pegar, miratelo y tal.
public float maxPlayTime = 120f;
private float startPlay;
private float currentPlayTime;
public float restTimePlayGUI;
void Start(){

   DontDestroyOnLoad(gameObject);
   startPlay = Time.time;
}
void Update(){

   currentPlayTime = Time.time - startPlay;

   restTimePlayGUI = maxPlayTime - currentPlayTime;

   if(currentPlayTime >= maxPlayTime){
   
      Application.LoadLevel("GameOver");
      Destroy(gameObject);

   }
}
Algo asi .Instancias el prefab cuando cargues el primer nivel y ya esta. Pongo en public maxPlayTime para que puedas cambiar el tiempo cuando lo instancies segun necesites y el restTimePlayGUI por si necesitas una cuenta atras que mostrar en la pantalla Cheers!
Título: Salvar cuenta atrás entre varias escenas
Publicado por: Argo214 en Febrero 15, 2016, 01:48:40 PM
[quote author=hammer" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35151" data-ipsquote-contentcommentid="127115">MmmmhhhhhTe creas un u prefab de un GameObject y a este gameobject le creas un script que contenga el DontDestroyOnLoad() para que se mantenga "vivo" cuando cambias de nivel.Bueno te lo escribo que me sera mas facil que explicarlo xD no vale copiar y pegar, miratelo y tal.
public float maxPlayTime = 120f;private float startPlay;
private float currentPlayTime;
public float restTimePlayGUI;
void Start(){

   DontDestroyOnLoad(gameObject);
   startPlay = Time.time;
}
void Update(){

   currentPlayTime = Time.time - startPlay;

   restTimePlayGUI = maxPlayTime - currentPlayTime;

   if(currentPlayTime >= maxPlayTime){
   
      Application.LoadLevel("GameOver");
      Destroy(gameObject);

   }
}
Algo asi .Instancias el prefab cuando cargues el primer nivel y ya esta. Pongo en public maxPlayTime para que puedas cambiar el tiempo cuando lo instancies segun necesites y el restTimePlayGUI por si necesitas una cuenta atras que mostrar en la pantalla Cheers! [/quote]El problema es que el player puede volver a niveles en los que ya ha estado, con lo que se duplicaría ese Gameobject.
Título: Salvar cuenta atrás entre varias escenas
Publicado por: juanma_teso en Febrero 15, 2016, 01:54:15 PM
Depende cómo instancies el prefab, si por ejemplo el prefab lo creas en el menú principal o cuando inicie el juego, sólo se creará una vez, si lo creas en cada nivel pues lógicamente sí. 
Título: Salvar cuenta atrás entre varias escenas
Publicado por: hammer en Febrero 15, 2016, 02:02:02 PM
Pues como dice juanma ya depende del juego el como instancies el prefab, puedes hacerlo cuando le den al play justo antes del cargar el nivel, o comprobar si ya existe antes de instanciarlo haciendo una busqueda, ya sea por nombre,tag,........etc
Título: Salvar cuenta atrás entre varias escenas
Publicado por: Argo214 en Febrero 15, 2016, 02:10:11 PM
Muchas gracias! Voy a intentarlo, a ver si me sale bien.
Título: Salvar cuenta atrás entre varias escenas
Publicado por: Arthure en Febrero 15, 2016, 02:39:07 PM
Busca informacion sobre Singleton ... es precisamente para tener solo un objeto que puedes consultar en cualquier momento del juego y nunca se duplica aunque vuelvas repetidamente a cualquier escena.
Título: Salvar cuenta atrás entre varias escenas
Publicado por: ACarranza en Febrero 15, 2016, 08:48:17 PM
esque ocupas tener un mejor orden en como estar plantenado tu juego, si tus factores son , muchas escenas donde el player va a estar, un timer que llegara a 0, entonces como dicen ocupas el DontDestroyOnLoad pero tambien ocupas instanciar solamente 1 vez ese gameobjet, para que no pase la multiinstancia tienes varias formas de hacerlo1. checar primero si ya se ha instanciado, si es el caso no lo instancias y listo2.  manejar una precarga en una escena anterior a los del gameplay, ahi cargas este Gameobject con el script para no destruirse y el timer, y como no pertenece a tu lista de escenas de gameplay pues no la vas a cargar, mas que las que te interesa, algo asilas escenas que ocupas... intro ---- menu  ---- precargaScena ---- escenas de gameplay --- game over.es una idea saludos