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

Problemas com o Ranking

Boa tarde, eu estou tendo dificuldades com o meu Ranking, onde ele não se atualiza com o código e acaba ficando estatico com um texto já escrito: Insira aqui a descrição dessa imagem para ajudar na acessibilidadeai uma instrutora deu a dica a dica de usar o ConfigurarTexto e meu código do painelRanking ficou assim:

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

public class PainelRanking : MonoBehaviour
{
[SerializeField]
private Ranking ranking;
[SerializeField]
private GameObject prefabColocado;

void Start()
{        
    var listaDeColocados = this.ranking.GetColocados();
    for(var i=0; i<listaDeColocados.Count; i++)
    {
        if(i > 5)
        {
            break;
        }
       var colocado = GameObject.Instantiate(this.prefabColocado, this.transform);
        
       ConfigurarTextos(colocado.GetComponentsInChildren<Text>(), i, 
       listaDeColocados[i]);
    }
}

private void ConfigurarTextos(Text[] listaTextos, int i, int pontuacao){
    listaTextos[0].text = i.ToString();
    listaTextos[1].text = "novoNome";
    listaTextos[2].text = pontuacao.ToString();
}
} 

Porém mesmo com as devidas alterações conforme a aula, esta dando este erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

O que ele significa, já que nessa aula ele apare-se e como eu posso corrigir meu código e assim continuar a aula?

2 respostas
solução!

Olá, Vitor! Tudo bem?

Pelos logs de erros apresentados, parece que você está enfrentando um problema com a tipagem dos dados no seu código do Unity.

O erro que você está vendo, "cannot convert from 'Colocado' to 'int'", indica que há uma incompatibilidade de tipos sendo passados para a função ConfigurarTextos.

No seu código, você está tentando passar um objeto do tipo Colocado como um inteiro. Isso ocorre porque a lista listaDeColocados agora contém objetos do tipo Colocado, e não mais inteiros. Portanto, quando você tenta passar listaDeColocados[i] para a função ConfigurarTextos, que espera um inteiro como terceiro argumento, ocorre o erro.

Para corrigir isso, você precisa ajustar a função ConfigurarTextos para aceitar um objeto do tipo Colocado em vez de um inteiro. Aqui está como você pode modificar a função:

private void ConfigurarTextos(Text[] listaTextos, int i, Colocado colocado){
    listaTextos[0].text = i.ToString();
    listaTextos[1].text = colocado.nome; // Aqui usamos o nome do colocado
    listaTextos[2].text = colocado.pontos.ToString(); // Aqui usamos os pontos do colocado
}

E no método Start, você deve passar o objeto Colocado diretamente:

var colocado = GameObject.Instantiate(this.prefabColocado, this.transform);
ConfigurarTextos(colocado.GetComponentsInChildren<Text>(), i, listaDeColocados[i]);

Com essas alterações, seu código deve funcionar corretamente, assumindo que os objetos Colocado estão sendo corretamente criados e adicionados à lista listaDeColocados. Certifique-se de que os objetos Colocado têm os atributos nome e pontos devidamente atribuídos antes de serem usados.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Obrigado pela ajuda.

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