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

Mesmo usando o Playerprefs o valor não é salvo.

Sempre que eu faço o teste do jogo, ele não salva o resultado, ele sempre coloca o resultado atual como se fosse o melhor resultado, mesmo usando o playerprefs. Primeiro eu achei que tinha errado algo no set/get.

Mas eles estão corretos e mesmo assim continuam gravando o resultado errado.

Segue o código:

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

public class Script_Interface_Controle : MonoBehaviour { private Script_Jogador scriptJogador; public Slider SliderVidaJogador; public GameObject PainelDeGameOver; public Text TextoTempoSobrevivencia; public Text TextoPontuacaoMaxima; private float tempoPontuacaoSalvo;

GameObject Jogador;

// Start is called before the first frame update
void Start()
{
    Jogador = GameObject.FindGameObjectWithTag("Jogador");
    scriptJogador = Jogador.GetComponent<Script_Jogador>();


    //Dando valor incial de barra de vida do Jogador
    SliderVidaJogador.maxValue = scriptJogador.status.Vida;
    AtualizarSliderVidaJogador();

    Time.timeScale = 1;

    tempoPontuacaoSalvo = PlayerPrefs.GetFloat("PontuacaoMaxima");

}

// Update is called once per frame
void Update()
{

}

public void AtualizarSliderVidaJogador()
{
    SliderVidaJogador.value = scriptJogador.status.Vida;
}

public void GameOver()
{
    PainelDeGameOver.SetActive(true);
    Time.timeScale = 0;

    int minutos = (int) Time.timeSinceLevelLoad / 60;
    int segundos = (int)Time.timeSinceLevelLoad % 60;

    TextoTempoSobrevivencia.text = "Você sobreviveu por:" + minutos + "min e " + segundos + "seg! " + "Tente outra vez!!!";

    AjustarPontuacaoMaxima(minutos,segundos);

}

void AjustarPontuacaoMaxima(int min, int seg)
{
    if (Time.timeSinceLevelLoad > tempoPontuacaoSalvo)
    {
        tempoPontuacaoSalvo = Time.timeSinceLevelLoad;
        TextoPontuacaoMaxima.text = string.Format("Seu melhor tempo é: {0}min e {1}seg!", min,seg);
        PlayerPrefs.SetFloat("PontuacaoMaxima", tempoPontuacaoSalvo);
    }
    if (TextoPontuacaoMaxima.text == "")
    {
        min = (int)Time.timeSinceLevelLoad / 60;
        seg = (int)Time.timeSinceLevelLoad % 60;
        TextoPontuacaoMaxima.text = string.Format("Seu melhor tempo é: {0}min e {1}seg!", min, seg);
    }
}

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

}

3 respostas

Oi, Antonio, tudo bem?

Seu código parece estar correto você pode mandar o projeto em .zip num Dropbox, Google Drive, ou similar pra podermos dar uma olhada mais no projeto como um todo?

link para download do zip. https://drive.google.com/open?id=14IBcVYthkwNidhGyNlIA8BZSlRGLFCqv

solução!

Oi, Antonio, tudo bem?

Identifiquei o erro, na verdade era algo até bobo.

No método AjustarPontuacaoMaxima tem um if pra quando o texto estiver em branco você usar o tempo que foi salvo, mas ao invés disso você estava usando o tempo atual.

Essa parte:

if (TextoPontuacaoMaxima.text == "")
{
  min = (int)Time.timeSinceLevelLoad / 60;
  seg = (int)Time.timeSinceLevelLoad % 60;
  TextoPontuacaoMaxima.text = string.Format("Seu melhor tempo é: {0}min e {1}seg!", min, seg);
}

Teria que ficar assim:

if(TextoPontuacaoMaxima.text == "")
{
  min = (int)tempoPontuacaoSalvo / 60;
  seg = (int)tempoPontuacaoSalvo % 60;
  TextoPontuacaoMaxima.text =
                string.Format("Seu melhor tempo é {0}min e {1}s", min, seg);
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software