Ao duplicar o prefab Zumbi e apagar o prefab original, por ter excluído o personagem errado, deu erro no script Controla Inimigo, no console aparece:
"NullReferenceException: Object reference not set to an instance of an object ControlaInimigo.Vagar () (at Assets/Scripts/ControlaInimigo.cs:70) ControlaInimigo.FixedUpdate () (at Assets/Scripts/ControlaInimigo.cs:43)"
Script Controla Inimigo:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ControlaInimigo : MonoBehaviour, IMatavel
{
public GameObject Jogadora;
private MovimentoPersonagem movimentaInimigo;
private AnimacaoPersonagem animacaoInimigo;
private Status statusInimigo;
public AudioClip SomDeMorte;
private Vector3 posicaoAleatoria;
private Vector3 direcao;
private float contadorVagar;
public float tempoEntrePosicoesAleatorias = 4;
public float raioPosicao = 10;
private float porcentagemGerarKitMedico = 0.15f;
public GameObject KitMedicoPrefab;
private ControlaInterface scriptControlaInterface;
[HideInInspector]
public GeradorZumbis meuGerador;
// Start is called before the first frame update
void Start()
{
Jogadora = GameObject.FindWithTag(Tags.Jogador);
animacaoInimigo = GetComponent<AnimacaoPersonagem>();
movimentaInimigo = GetComponent<MovimentoPersonagem>();
AleatorizarZumbi();
statusInimigo = GetComponent<Status>();
scriptControlaInterface = GameObject.FindObjectOfType(typeof(ControlaInterface)) as ControlaInterface;
}
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, Jogadora.transform.position);
movimentaInimigo.Rotacionar(direcao);
animacaoInimigo.Movimentar(direcao.magnitude);
if(distancia > 15)
{
Vagar ();
}
else if(distancia > 2.5)
{
CorrerParaJogadora ();
}
else
{
direcao = Jogadora.transform.position - transform.position;
animacaoInimigo.Atacar(true);
}
}
void Vagar ()
{
contadorVagar -= Time.deltaTime;
if (contadorVagar <= 0)
{
posicaoAleatoria = AleatorizarPosicao();
contadorVagar += tempoEntrePosicoesAleatorias + Random.Range(-1f, 1f);
}
bool ficouPertoOSuficiente = Vector3.Distance(transform.position, posicaoAleatoria) <= 0.05;
if (ficouPertoOSuficiente == false)
{
direcao = posicaoAleatoria - transform.position;
movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
}
}
void CorrerParaJogadora ()
{
direcao = Jogadora.transform.position - transform.position;
movimentaInimigo.Movimentar(direcao, statusInimigo.Velocidade);
animacaoInimigo.Atacar(false);
}
Vector3 AleatorizarPosicao ()
{
Vector3 posicao = Random.insideUnitSphere * raioPosicao;
posicao += transform.position;
posicao.y = transform.position.y;
return posicao;
}
void AtacaJogadora()
{
int dano = Random.Range(20, 30);
Jogadora.GetComponent<ControlaJogadora>().TomarDano(dano);
}
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();
}
}
public void Morrer ()
{
Destroy(gameObject, 2);
animacaoInimigo.Morrer();
this.enabled = false;
movimentaInimigo.Morrer();
ControlaAudio.instancia.PlayOneShot(SomDeMorte);
VerificarGeracaoKitMedico(porcentagemGerarKitMedico);
scriptControlaInterface.AtualizarQuantidadeDeZumbisMortos();
meuGerador.DiminuirQuantidadeDeZumbisVivos();
}
void VerificarGeracaoKitMedico (float porcentagemGeracao)
{
if (Random.value <= porcentagemGeracao)
{
Instantiate(KitMedicoPrefab, transform.position, Quaternion.identity);
}
}
}