Zumbis estão spawnando e andando desse modo, ao invés de seguir meu jogador:
Segue minha configurações e meus códigos:
public class ControlaInimigo : MonoBehaviour
{
public GameObject Jogador;
public float Velocidade = 6;
// Start is called before the first frame update
void Start()
{
Jogador = GameObject.FindWithTag("Jogador");
//*jogador está com a tag 'Jogador'
}
// O método Update é chamado a cada frame e é utilizado para processar entrada do jogador.
void Update()
{
}
//Método específico para física na Unity
//Update roda o tempo todo, a cada frame do jogo, FixedUpdate roda em um tempo fixo (0,02 seg)
void FixedUpdate()
{
float distancia = Vector3.Distance(transform.position, Jogador.transform.position);
//Passa duas posicoes e o Distance passa a distancia entre elas
Vector3 direcao = Jogador.transform.position - transform.position;
//posição do jogador - onde eu queria estar
Quaternion novaRotacao = Quaternion.LookRotation(direcao);
//variavel de rotação
GetComponent<Rigidbody>().MoveRotation(novaRotacao);
//MoveRotation passa uma rotação para o inimigo
if (distancia > 2) //2 por conta dos colisres do personagem e do inimigo(1cm p cada)
{
GetComponent<Rigidbody>().MovePosition
(GetComponent<Rigidbody>().position + direcao.normalized * Velocidade * Time.deltaTime);
//direcao foi transformada em 1 pelo normalized
//Pega o Rigidbody e move para uma posição
//Posição que a física ja colocou o personagem(o local que ele está)
//Somado com a direção que o inimigo deve ir, no caso, a posição do jogador
//multiplicar o deslocamento por Time.deltaTime para fazer a velocidade ser por segundo e não por Frame
GetComponent<Animator>().SetBool("Atacando", false);
}
else
{
GetComponent<Animator>().SetBool("Atacando", true);
}
}
//este método tem que ter o mesmo nome do evento
void AtacaJogador()
{
Time.timeScale = 0;
//tempo em que o jogo roda
Jogador.GetComponent<ControlaJogador>().TextoGameOver.SetActive(true);
Jogador.GetComponent<ControlaJogador>().Vivo = false;
}
}
public class GeradorZumbis : MonoBehaviour
{
public GameObject Zumbi;
float contadorTempo = 0;
public float TempoGerarZumbi = 1;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
contadorTempo += Time.deltaTime;
//começou zerado e é somado a 1
if (contadorTempo >= TempoGerarZumbi)
{
Instantiate(Zumbi, transform.position, transform.rotation);
//Criar objetos na posicao do item vazio
contadorTempo = 0;
}
}
}