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

Erro na animação , e aviso de Look Rotation é igual a zero

Estou tentando apenas fazer o codigo demonstrado nas video aulas porem esta dando erro, o zumbi nao para como deveria , mesmo usando o mesmo codigor no jogador ( onde la ele funciona ) fora esse mensagem "look rotation viewing vector is zero UnityEngine.Quaternion:LookRotation(Vector3) MovimentaPersonagem:Rotacionar(Vector3) (at Assets/Script/MovimentaPersonagem.cs:22) ControlaInimigo:FixedUpdate() (at Assets/Script/ControlaInimigo.cs:36)", poderia por favor me ajudar.

Codigo do Controla Inimigo

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

public class ControlaInimigo : MonoBehaviour , IMorrivel
{
    public GameObject Jogador;

    private Animator animatorInimigo;
    private ControlaInterface scriptControlaInterface;
    private MovimentaPersonagem movimentaInimigo;
    private AnimacaoPersonagem animacaoInimigo;
    private Status statusInimigo;
    public AudioClip SomDeMorte;
    private Vector3 posicaoAleatoria;
    private Vector3 direcao;
    private float contadorVagar;
    private float tempoEntrePosiçoesAleatoria = 4;


    // Start is called before the first frame update
    void Start()
    {
        Jogador = GameObject.FindWithTag("Personagem");
        AleatorizarZumbi();
        animatorInimigo = GetComponent<Animator>();
        movimentaInimigo = GetComponent<MovimentaPersonagem>();
        animacaoInimigo = GetComponent<AnimacaoPersonagem>();
        statusInimigo = GetComponent<Status>();
    }

    private void FixedUpdate()
    {

        float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
        movimentaInimigo.Rotacionar(direcao);
        animacaoInimigo.Movimentar(direcao.magnitude);

        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);
        }     
    }
     void Vagar ()
    {
        contadorVagar -= Time.deltaTime;
        if(contadorVagar<=0)
        {
            posicaoAleatoria = AleatorizaPosicao();
            contadorVagar += tempoEntrePosiçoesAleatoria;
        }
        bool Suficiente = Vector3.Distance(transform.position, posicaoAleatoria) >= 0.5;
        if (Suficiente)
                {
            direcao = posicaoAleatoria - transform.position;
            movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
                }  
    }
    Vector3 AleatorizaPosicao()
    {
        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<ControlaJogador>().TomarDano(Dano);


    }
    void AleatorizarZumbi()
    {
        int geratTipoZumbi = Random.Range(1, 28);
        transform.GetChild(geratTipoZumbi).gameObject.SetActive(true);
    }
    public void TomarDano(int Dano)
    {
        statusInimigo.Vida -= Dano;
        if(statusInimigo.Vida == 0)
        {
            Morrer();
        }
    }

    public void Morrer()
    {
        Destroy(gameObject);
        ControlaAudio.intancia.PlayOneShot(SomDeMorte);
    }
}   
3 respostas

Olá, tudo bem?

Você consegue criar um .zip do projeto e subir num Dropbox, Google Drive ou outro local pra mandar o link aqui pra gente?

Sobre o "Look rotation equal zero" é só o Unity avisando que estamos computando algo que não é necessário mas não causa muitos prejuízos, acredito até que solucionamos isto nas outras partes do curso.

Eu peguei o codigo final do jogo liberado na ultima aula e fui comparando ao meu , achei um erro na seguinte linha

bool Suficiente = Vector3.Distance(transform.position, posicaoAleatoria) >= 0.5;

Na sua aula vc colocou 0.05 no valor , ao corrigir o erro tudo funcionou porem gostaria de saber pq isso impacta tanto na animaçao, poderia me responder?

solução!

Porque o tamanho é muito grande então quando ele começa a se mover já chega no resultado final ou nem se move. Tem que ser um valor bem próximo de zero.

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