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");
}
}
}
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 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.
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í.
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
Muchas gracias! Voy a intentarlo, a ver si me sale bien.
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.
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