Parece que o evento ataque é acionado sem o zumbi realmente estar perto do jogador(sem ate mesmo o jogador nem ter passado perto).
Outro probleminha :meus zumbis estão mais rápido do que deveriam (cheguei a colocar a velocidade no um, mas n deu muita diferença). Procurei, procurei e n consigo achar o erro(dei uma prosseguida nas aulas por isso o código está incrementado ) Help!
public class ControlaInimigo : MonoBehaviour {
//para que o inimigo saiba que tem que seguir o Jogador que é atribuido no Inspetor do Unity
public GameObject Jogador;
public float Velocidade = 5;
private Rigidbody rigiboryInimigo;
private Animator animatorJogador;
// Use this for initialization
void Start () {
rigiboryInimigo = GetComponent<Rigidbody> ();
animatorJogador = GetComponent<Animator> ();
//achar GameObject com a tag ("nome exatamente igual ao da tag")
Jogador = GameObject.FindWithTag ("Jogador");
//variavel int não abrange números decimais.
int geraTipoZumbi = Random.Range (1, 28);
//numeros aleatorios que varia entre(1, 28(e o ultimo numero é descartado então vai ser do 1-27))
//transform para acessar algo que esta dentro do zumbi
//GetChild pega filha do objeto (as variáveis que tem dentro) e entre (o nº da lista-qual dos filhos)
transform.GetChild (geraTipoZumbi).gameObject.SetActive (true);
}
// Update is called once per frame
void Update () {
}
void FixedUpdate()
{
//para que o zumbi va realmente em direção ao jogador
Vector3 direcao = Jogador.transform.position - transform.position;
//float para armazenar numeros
float distancia = Vector3.Distance(Jogador.transform.position, transform.position);
//variável para calcular rotação
Quaternion novaRotacao = Quaternion.LookRotation (direcao);
//aplicação da rotação no zumbi
rigiboryInimigo .MoveRotation (novaRotacao);
//fora do If para rotacionar em qualquer condicao.
if (distancia > 2.5) {
//posiçao que estou + a direção que quero estar (perseguir o jogador)
rigiboryInimigo .MovePosition
(rigiboryInimigo .position +
(direcao * Velocidade * Time.deltaTime));
animatorJogador.SetBool ("Atacando", false);
} else {
animatorJogador.SetBool ("Atacando", true);
}
}
//é ativado automaticamente quando ocorre a animação marcada pela cena.
void AtacaJogador ()
{
//velocidade do jogo
Time.timeScale = 0;//pausa
//as variaveis publicas funcionam até em outros scrips
Jogador.GetComponent<ControlaJogador>().TextoGameOver.SetActive(true);
//tbm é pública e mostra que o personagem está morto
Jogador.GetComponent<ControlaJogador> ().Vivo = false;
}
}
Não sei se o script Gerador de Zumbi está interferindo em algo.
public GameObject Zumbi;
//tipo float guarda numeros e vai ser nosso relogio
private float contadorTempo = 0;
public float TempoGerarZumbi = 1;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
//Time.deltaTime ----> transforma frame em seg.
//cada segundo que passa é somado ao contadoTempo
contadorTempo += Time.deltaTime;//forma simplificada
//contadorTempo = contadorTempo + Time.deltaTime
//sem isso iria gerar zumbi a cada frame
if (contadorTempo >= TempoGerarZumbi) {
//que nem nas balas para gerar varios zumbis(clones)
Instantiate (Zumbi, transform.position, transform.rotation);
contadorTempo = 0;
}
}
}