1
resposta

Zumbis não seguem meu personagem

Zumbis estão spawnando e andando desse modo, ao invés de seguir meu jogador: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Segue minha configurações e meus códigos:

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

public class ControlaInimigo : MonoBehaviour
{ 
    public GameObject Jogador;
    public float Velocidade = 6;

    // Start is called before the first frame update
    void Start()
    {
        Jogador = GameObject.FindWithTag("Jogador");
        //*jogador está com a tag 'Jogador'
    }

    // O método Update é chamado a cada frame e é utilizado para processar entrada do jogador.
    void Update()
    {
        
    }

    //Método específico para física na Unity
    //Update roda o tempo todo, a cada frame do jogo, FixedUpdate roda em um tempo fixo (0,02 seg)
    void FixedUpdate()
    {
        float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
        //Passa duas posicoes e o Distance passa a distancia entre elas

        Vector3 direcao = Jogador.transform.position - transform.position;
        //posição do jogador - onde eu queria estar

        Quaternion novaRotacao = Quaternion.LookRotation(direcao);
        //variavel de rotação
        GetComponent<Rigidbody>().MoveRotation(novaRotacao);
        //MoveRotation passa uma rotação para o inimigo

        if (distancia > 2) //2 por conta dos colisres do personagem e do inimigo(1cm p cada)
        {
            GetComponent<Rigidbody>().MovePosition
                (GetComponent<Rigidbody>().position + direcao.normalized * Velocidade * Time.deltaTime);
            //direcao foi transformada em 1 pelo normalized
            //Pega o Rigidbody e move para uma posição
            //Posição que a física ja colocou o personagem(o local que ele está)
            //Somado com a direção que o inimigo deve ir, no caso, a posição do jogador
            //multiplicar o deslocamento por Time.deltaTime para fazer a velocidade ser por segundo e não por Frame

            GetComponent<Animator>().SetBool("Atacando", false);
        }
        else
        {
            GetComponent<Animator>().SetBool("Atacando", true);
        }
    }

    //este método tem que ter o mesmo nome do evento
    void AtacaJogador()
    {
        Time.timeScale = 0;
        //tempo em que o jogo roda
        Jogador.GetComponent<ControlaJogador>().TextoGameOver.SetActive(true);

        Jogador.GetComponent<ControlaJogador>().Vivo = false;
    }
}
public class GeradorZumbis : MonoBehaviour
{
    public GameObject Zumbi;

    float contadorTempo = 0;

    public float TempoGerarZumbi = 1;
    // Start is called before the first frame update
    void Start()
    {
  
    }

    // Update is called once per frame
    void Update()
    {
        contadorTempo += Time.deltaTime;
        //começou zerado e é somado a 1

        if (contadorTempo >= TempoGerarZumbi)
        {
            Instantiate(Zumbi, transform.position, transform.rotation);
            //Criar objetos na posicao do item vazio

            contadorTempo = 0;
        }
    }
}
1 resposta

Olá, Pedro! Tudo bem?

Analisei o seu código e o mesmo não apresenta nenhum problema ou inconsistência que poderia está causando esse problema.

Contudo, existe um ponto que é muito importante que você acabou não mostrando nos seus prints, que é se você criou a tag "Jogador" e atribuiu ela para Jogador.

Caso não tenha feito isso, siga os seguintes passos:

  1. Na aba "Hierarchy" clique em Jogador;

  2. Agora, na aba "inspector", clique em "tag" e busque a opção "Add tag";

  3. Dentro dela crie uma nova tag com o nome "Jogador" e salve;

  4. Por fim, atribua essa tag para o Jogador;

Com isso, o método FindWithTag deve encontrar a tag atribuída ao jogador. Espero ter ajudado, caso ainda esteja com problemas, estarei à disposição.

Bons estudos!

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