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

[Bug] Meu gerador parou de funcionar

Ola professor, estou aqui pois apos a implementação do codigo de calcular a distancia entre o player e o chefe o meu codigo esta mostrando um erro q nao sei como resolver. Este aqui: Assets/codigos/GeradorChefe.cs(39,35): error CS0029: Cannot implicitly convert type 'UnityEngine.Vector3' to 'float'

2 respostas
  • Este e o meu codigo /home/joao/trabalho programacao/apocalipse-zumbi-alura/Assets/codigos/GeradorChefe.cs

Obs: Posso parecer um pouco presunçoso agora mas saiba que nao e a intenção. Mas se o senhor nao souber como abrir voce pode jogar isso no google que aparecera o meu codigo.

solução!

Olá Edison, tudo bem?

Esse erro que você está enfrentando (error CS0029: Cannot implicitly convert type 'UnityEngine.Vector3' to 'float') ocorre porque o código está tentando atribuir um valor do tipo Vector3 a uma variável do tipo float. Vamos dar uma olhada no trecho de código que você mencionou para identificar onde isso pode estar acontecendo.

O método Vector3.Distance retorna um valor do tipo float, que representa a distância entre dois pontos no espaço 3D. Certifique-se de que você está atribuindo esse valor a uma variável do tipo float.

Aqui está um exemplo de como o código deve estar:

Vector3 CalcularPosicaoPossivelMaisDistanteDoJogador()
{
    Vector3 posicaoDeMaiorDistancia = Vector3.zero;
    float maiorDistancia = 0;
    foreach (Transform posicao in PosicoesPossiveisDeGeracao)
    {
        float distanciaPosicaoJogador = Vector3.Distance(jogador.position, posicao.position);
        if (distanciaPosicaoJogador > maiorDistancia)
        {
            maiorDistancia = distanciaPosicaoJogador;
            posicaoDeMaiorDistancia = posicao.position;
        }
    }
    return posicaoDeMaiorDistancia;
}

E no método Update, você deve chamar CalcularPosicaoPossivelMaisDistanteDoJogador e usar o retorno como a posição para criar o chefe:

void Update()
{
    if (Time.timeSinceLevelLoad > tempoParaProximaGeracao)
    {
        Vector3 posicaoDeCriacao = CalcularPosicaoPossivelMaisDistanteDoJogador();
        Instantiate(ChefePrefab, posicaoDeCriacao, Quaternion.identity);
        tempoParaProximaGeracao = Time.timeSinceLevelLoad + TempoEntreGeracoes;
    }
}

Certifique-se de que as variáveis jogador, PosicoesPossiveisDeGeracao, ChefePrefab, tempoParaProximaGeracao e TempoEntreGeracoes estão todas corretamente definidas e inicializadas em seu script.

Sobre o código que você compartilhou, o caminho passado não é um link acessível em qualquer lugar, mas sim apenas no seu sistema. Isso acontece porque é um caminho de pasta local e por ser local tem como acessá-lo no navegador. Mas, não tenho acesso por ser um arquivo local da sua máquina.

Espero ter ajudado e bons estudos!

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