2
respostas

Não consigo alterar o nome

Pessoal, após escrever o nome no input field, que deveria alterar o nome com o método AlterarNome() meu ranking é atualizado com a pontuação mas no lugar do nome não aparece nada, no arquivo json o local onde deveria estar o nome aparece vazio. No start da classe ele salva a string "nome" mas ao terminar de escrever ao inves de atualizar o nome ele grava uma string vazia.

public class NovaPontuacao : MonoBehaviour
{
    [SerializeField]
    private Text textoPontuacao;

    [SerializeField]
    private ControlaPontuação pontuacao;
    [SerializeField]
    private ControlaRanking ranking;
    private int id;

    void Start()
    {
        pontuacao = GameObject.FindObjectOfType(typeof(ControlaPontuação)) as ControlaPontuação;
        int pontuacaoAtual = -1;
        if (pontuacao != null)
        {
            pontuacaoAtual = pontuacao.AtualizarPontuacao(); 
        }
        textoPontuacao.text = pontuacaoAtual.ToString();
        id = ranking.AdicionarPontos(pontuacaoAtual, "murilo");
    }

    public void AlterarNome(string nome)
    {
        this.ranking.AlterarNome(nome, this.id);
    }
}

public class ControlaRanking : MonoBehaviour { private static string NOME_DO_ARQUIVO = "Ranking.json"; private string caminhoParaSalvar; [SerializeField] private List listaColocados;

private void Awake()
{
    this.caminhoParaSalvar = Path.Combine(Application.persistentDataPath, NOME_DO_ARQUIVO);
    if (File.Exists(caminhoParaSalvar))
    {
        var textoJson = File.ReadAllText(caminhoParaSalvar);
        JsonUtility.FromJsonOverwrite(textoJson, this);
    }
    else
    {
        listaColocados = new List<Colocado>();
    }
}

public void AlterarNome(string novoNome, int id)
{
    foreach(var item in this.listaColocados)
    {
        if (item.id == id)
        {
            item.nome = novoNome;
            break;
        }
    }
    this.SalvarRanking();
}

public int AdicionarPontos(int ponto, string nome)
{
    var id = listaColocados.Count * UnityEngine.Random.Range(1, 100000);
    var colocado = new Colocado(ponto, nome, id);
    this.listaColocados.Add(colocado);
    this.listaColocados.Sort();
    this.SalvarRanking();
    return id;
}

public ReadOnlyCollection<Colocado> PegarColocados()
{
    return this.listaColocados.AsReadOnly();
}

private void SalvarRanking()
{
    var textoJson = JsonUtility.ToJson(this);
    File.WriteAllText(caminhoParaSalvar, textoJson);
}

}

2 respostas

Oi Murilo, tudo bom. O Método AlterarNome da classe nova pontuação é chamado por um evento q vc configurou no inspector da Unity ne?

Nessa configuração, vc está mandando como argumento para essa função o texto que está no textField?

Olá Profº Ricardo! Descobri que estava chamando a função no Input Field da maneira errada, pois há duas opções, uma dinâmica e um estática. Eu estava chamando pelo modo estático , por isso não atualizava o nome. Obrigado pela ajuda e parabéns pelas ótimas aulas!

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