Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
12
respostas

Os inimigos não estão semovento corretamente!

Estou com um problema com os meus inimigos ele estão movendo lenta mente é batendo um as outros com se fosse bolas batendo umas entre outras.

Lenbrando que eu tirei "Use Gravity" do inimigo no Rigidbody.

Aqui o meu scripty do inimigos:

public class Inimigo : MonoBehaviour {

    [SerializeField] private int vida;  // SerializeField serve para a interface unity

    // Use this for initialization
    void Start () {
         UnityEngine.AI.NavMeshAgent agente = GetComponent<UnityEngine.AI.NavMeshAgent>();
         GameObject fimDoCaminho = GameObject.Find ("FimDoCaminho");
         Vector3 posicaoDoFimDoCaminho = fimDoCaminho.transform.position;
         agente.SetDestination(posicaoDoFimDoCaminho);
    }

    public void RecebeDano (int pontosDeDano){

         vida -= pontosDeDano;

         if(vida <= 0){
            Destroy (this.gameObject);
         }
    }
}

Scripty GeradorDelnimigos:

public class GeradorDeInimigos : MonoBehaviour {

    [SerializeField] private GameObject inimigo;

    private float tempoDeCriacao = 2f;
    private float ultimaGeracao;

    // Update is called once per frame
    void Update () {
        GeraInimigo ();
    }

    private void GeraInimigo(){

        float tempoAtual = Time.time;

        if (tempoAtual > ultimaGeracao + tempoDeCriacao){

            ultimaGeracao = tempoAtual;
            Vector3 posicaoDoGerador = this.transform.position;
            Instantiate (inimigo, posicaoDoGerador, Quaternion.identity);

        }

    }
}
12 respostas

Oi Guilherme, tudo bom? Voce chegou a colocar o rigidbody como kinematic?

Bom dia,

Você ta falando sobre Rigidbody do Inimigo?

sim ja testei a o opção is kinematic e não deu em nada

Vc consegue mandar um print de como estão os componentes dos inimigos? Se preferir manda um link do git com projeto.

Vou mandar as imagens : https://pasteboard.co/H4Kz4bC.png, https://pasteboard.co/H4KAu2d.png

Isto começou tepois do 2 videos da aula 5

Então o erro começou depois de você colocar o rigidbody?

acho que sim, mais mesmo que eu ja removi componente Rigidbody a unica coisa que muda e o inimigo é que ele fica parado e não se move

solução!

Eu descobrir o problema era que o fimdocaminho estava altura acima de zero, e isso que calsava o erro, porque no script esta espeficando que e para inimigo achar fimdocaminho pelo Vector3 que é Y.

Eu também testei outro Vector2 ele só se movimenta se vector do fimdocaminho estiver zerado.

Tem como outro jeito de fazer o inimigo se movimentar?

É legal utilizar o navmesh para movimentar os personagens, pq ele calcula os obstáculos e faz o personagem achar um caminho "livre" até o lugar que vc quer.

O que você pode fazer é:

Na hora de colocar um destino pro seu inimigo, ao invés de colocar "destino = fimdocaminho.position", coloque "destino = new Vector3(fimdocaminho.x, this.transform.position.y, fimdocaminho.z);"

Assim você ignora a altura do objeto fim do caminho.

Esta dando Erro:

Assets/Scripts/Inimigo.cs(13,60): error CS1061: Type `UnityEngine.GameObject' does not contain a definition for `x' and no extension method `x' of type `UnityEngine.GameObject' could be found. Are you missing an assembly reference?
Assets/Scripts/Inimigo.cs(13,103): error CS1061: Type `UnityEngine.GameObject' does not contain a definition for `z' and no extension method `z' of type `UnityEngine.GameObject' could be found. Are you missing an assembly reference?

Voce está usando um GameObject como se fosse um transform. Coloca algo do tipo: fimdocaminho.transform.position.x e fimdocaminho.transform.position.z

valeu deu certo