Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Valor não é salvo com playerprefs

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement;

public class ControlaInterface : MonoBehaviour { private ControlaJogador scriptControlaJogador; public Slider SliderVidaJogador; public GameObject PainelGameOver; public Text TextoTempoSobrevivencia; public Text TextoMelhorTempo; privatefloat MelhorTempo;

void Awake  ()
{
    Time.timeScale = 1;
    scriptControlaJogador = GameObject.FindWithTag("Jogador").GetComponent<ControlaJogador>();
    SliderVidaJogador.maxValue = scriptControlaJogador. meuStatus.Vida;
    AtualizarSliderVidaJogador();
    MelhorTempo = PlayerPrefs.GetFloat("pontuacao");
}

public void AtualizarSliderVidaJogador()
{
    SliderVidaJogador.value = scriptControlaJogador.meuStatus.Vida;

}

public void GameOver()
{
    PainelGameOver.SetActive(true);
    Time.timeScale = 0;
    int minutos = (int)(Time.timeSinceLevelLoad / 60);
    int segundos = (int)(Time.timeSinceLevelLoad % 60);
    TextoTempoSobrevivencia.text = ("Você sobreviveu por " + minutos + " minutos e " + segundos + " segundos");
    AjustarMelhorTempo(minutos, segundos);
}

public void Reiniciar()
{
    SceneManager.LoadScene("game");
}

void AjustarMelhorTempo(int min, int seg)
{
    if(Time.timeSinceLevelLoad > MelhorTempo)
    {
        MelhorTempo = Time.timeSinceLevelLoad;
        TextoMelhorTempo.text = string.Format("Seu melhor tempo é {0} minutos e {1} segundos", min, seg);
        PlayerPrefs.SetFloat("pontuacao", MelhorTempo);
    }
    if(TextoMelhorTempo.text == "")
    {
        min = (int)(MelhorTempo / 60);
        seg = (int)(MelhorTempo % 60);
        TextoMelhorTempo.text = string.Format("Seu melhor tempo é {0} minutos e {1} segundos", min, seg);
    }
}

}

4 respostas

Oi, Silvio, tudo bem?

Você consegue fazer um .zip do seu projeto e subir num Google Drive, Dropbox, etc e colocar aqui?

Você chegou a testar fazer algo tipo:

PlayerPrefs.SetFloat("pontuacao", 1000); no Awake e depois apagar essa linha e ver se o melhor tempo é 1000?

Testei aqui esta linha e ele continua não salvando, o projeto eu subi no DropBox.

Tem outra coisa que ele não faz que é tocar o som de morte do zumbi, eu preferi colocar cada som no elemento no qual ele será geral, para poder usar a ideia do som 3d, a bala faz barulho, o jogador tomando dano também, o zumbi morrendo não, não sei o que posso ter feito de errado.

https://www.dropbox.com/s/o7sntyruxrw393h/apocalipse-zumbi-alura.rar?dl=0

solução!

Parece que a Unity não estava carregando a referencia da Slider no Awake por algum motivo trocar o método para Start no script ControlaInterface parece ter resolvido o problema momentaneamente.

Sobre o som: como o seu audio source fica no inimigo e ele é destruído ao morrer mesmo você dando o PlayOneShot esse audio source não existe mais para tocar o som. Por isso durante o curso eu utilizei um singleton para tocar o som.

Os dois casos resolvidos com suas dicas!

Obrigado!!!!