Look rotation viewing vector is zero UnityEngine.Quaternion:LookRotation(Vector3) MovimentoPersonagem:RotacionarPersonagens(Vector3) (at Assets/Scripts/MovimentoPersonagem.cs:25) ControlaInimigo:FixedUpdate() (at Assets/Scripts/ControlaInimigo.cs:32)
Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ControlaInimigo : MonoBehaviour
{
public GameObject jogador;
private MovimentoPersonagem MovimentaInimigo;
private AnimacaoPersonagem animacaoInimigo;
private status statusInimigo;
private Vector3 posicaoAleatoria;
private Vector3 direcao;
private float contadorVagar;
private float tempoEntrePosicoesAleatorias = 4;
// Start is called before the first frame update
void Start()
{
jogador = GameObject.FindWithTag("Jogador");
AleatorizarZumbi();
MovimentaInimigo = GetComponent<MovimentoPersonagem>();
animacaoInimigo = GetComponent<AnimacaoPersonagem>();
statusInimigo = GetComponent<status>();
}
// Update is called once per frame
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, jogador.transform.position);
MovimentaInimigo.RotacionarPersonagens(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 = aleatorizarPosicao();
contadorVagar += tempoEntrePosicoesAleatorias;
}
bool ficouPertoOSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
if (ficouPertoOSuficiente == false)
{
direcao = posicaoAleatoria - transform.position;
MovimentaInimigo.Movimentar(direcao, statusInimigo.velocidade);
}
}
Vector3 aleatorizarPosicao()
{
Vector3 posicao = Random.insideUnitSphere * 10;
posicao += transform.position;
posicao.y = transform.position.y;
return posicao;
}
void AtacaJogador()
{
int dano = Random.Range(20, 30);
jogador.GetComponent<ControladorJogador>().Tomardano(dano);
}
void AleatorizarZumbi()
{
int geraTipoZumbi = Random.Range(1, 28);
transform.GetChild(geraTipoZumbi).gameObject.SetActive(true);
}
}