3
respostas

Zumbis ficam parados

Boa noite.

Ao fazer as alterações para que os zumbis se movam de forma aleatoria, eles ficam apenas parados, e comecam a perseguir o jogador quando ele chega muito perto. Deve haver algo errado com Vagar(), mas estou tendo dificuldade em achar o problema

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

public class ControlaInimigo : MonoBehaviour, IMatavel
{

    public GameObject Jogador;
    private AnimacaoPersonagem animacaoInimigo;
    private MovimentaPersonagem movimentaInimigo;
    private Status statusInimigo;
    public AudioClip SomMorte;
    private Vector3 posicaoAleatoria;
    private Vector3 direcao;
    private float contadorVagar = 0;
    private float tempoEntrePosicoesAleatorias = 4;


    // Start is called before the first frame update
    void Start()
    {
        Jogador = GameObject.FindWithTag(Tags.Jogador);
        aleatorizarZumbi();

        animacaoInimigo = GetComponent<AnimacaoPersonagem>();
        movimentaInimigo = GetComponent<MovimentaPersonagem>();
        statusInimigo = GetComponent<Status>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
        movimentaInimigo.Rotacionar(direcao);
        animacaoInimigo.AnimarMovimento(direcao);

        if (distancia > 15)
        {
            Vagar();
        }

        else if (distancia > 2.5)
        {
            direcao = Jogador.transform.position - transform.position;

            movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);

            animacaoInimigo.Atacar(false);
        }

        else
        {
            animacaoInimigo.Atacar(true);
        }
    }

    Vector3 AleatorizarPosicao()
    {
        Vector3 posicao = Random.insideUnitSphere * 10;
        posicao += transform.position;
        posicao.y = transform.position.y;

        return posicao;
    }

    void AtacaJogador()
    {
        int dano = Random.Range(10, 20);
        Jogador.GetComponent<Controla_Jogador>().TomarDano(dano);
    }

    private void aleatorizarZumbi()
    {
        int geraTipoZumbi = Random.Range(1, 28);
        transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
    }

    public void TomarDano(int dano)
    {
        statusInimigo.Vida -= dano;
        if(statusInimigo.Vida <= 0)
        {
            Morrer();
        }
    }

    void Vagar()
    {
        contadorVagar -= Time.deltaTime;
        if(contadorVagar <= 0)
        {
            posicaoAleatoria = AleatorizarPosicao();
            contadorVagar += tempoEntrePosicoesAleatorias;
        }

        bool ficouPertoOSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;

        if(ficouPertoOSuficiente)
        {
            direcao = posicaoAleatoria - transform.position;
            movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
        }

    }

    public void Morrer()
    {
        Destroy(gameObject);
        ControlaAudio.instancia.PlayOneShot(SomMorte);
    }
}
3 respostas

Oi, Luis, olhando assim não encontrei nada.

Quer fazer um .zip do projeto e mandar o link pra gente de algum local de acesso pra baixarmos? Como Google Drive, Dropbox, WeTransfer, etc

Entendido. Aqui esta o programa. Tambem tenho notado que os zumbi "empurram" o personagem principal, quando varios estao juntos atacando. Qual poderia ser a causa?

https://drive.google.com/drive/folders/1MU1HLPY4uBPFAYRd1yxN8p0FfHklqIU-?usp=sharing

Oi, Luis, tudo bem?

Nessas linhas aqui acho que faltou inverter a condição:

 if(ficouPertoOSuficiente)
{
    direcao = posicaoAleatoria - transform.position;
     movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
}

A gente quer que ele vague quando não ficouPertoOSuficiente então teria que mudar pra == false ou if(!ficouPertoOSuficiente) invertendo assim a condição.

Sobre empurrar a personagem você pode ir no Rigidboy e aumentar a massa da personagem para 100 que acredito que isso deve se resolver, já que o zumbi tem bem menos massa que ela não vai conseguir empurrar.

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