Problema com o Trigger campo de visao | Fórum | School of Net

Deseja poder participar de nosso fórum e tirar todas as suas dúvidas?
Clique aqui e assine nosso plano de acesso ilimitado. Saiba mais.

por Samuel

1 ano, 2 meses atrás Samuel

Problema com o Trigger campo de visao

Estou com problema com o Trigger campo de visão. Após adiciona-lo ao inimigo e anexar o script CampoDeVisao, aparentemente ocorre um erro entre o trigger o player e do inimigo, pois eu começo o jogo já perdendo vida, como se o inimigo estivesse encostando no trigger do player, mesmo com o inimigo bem longe. Caso eu desative esse trigger do inimigo, ele funciona normalmente. Já setei a var seguir = false no script do Inimigo também. Já revi 2x a aula e tambem já adicionei a layer inimigo ao inimigo e ao filho (campo de visão). Parece que ocorre esse problema entre o entendimento dos triggers. O trigger do campo de visão se confunde com o Trigger do player aparentemente e já inicia tirando vida do player. E quando eu chego no trigger do inimigo, ele ativa e desativa a var seguir. Não seguindo a lógica de perseguir caso esteja dentro do trigger. Pode me ajudar? Estou muito satisfeito com o curso e gostaria muito de finaliza-lo sem dúvida alguma. Att, Samuel. // ------------- SCRIPT AI_ZUMBIE(inimigo) -----------------// using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; //importar essa biblioteca public class AI_Zumbie : MonoBehaviour { NavMeshAgent agente; //var para receber o inimigo GameObject player; //var para receber o player public bool seguir = false; bool areaDano = false; //var que vai permitir que o inimigo aplique dano no player // Use this for initialization void Start () { agente = GetComponent<NavMeshAgent>(); player = GameObject.FindGameObjectWithTag("Player"); //colocar a tag "Player" no jogador } // Update is called once per frame void Update () { if (seguir) { agente.isStopped = false; //coloca ele como falso, para começar a seguir novamente agente.destination = player.transform.position; // destino do agente inteligente é para a posição do player } else { agente.isStopped = true; //Pausar a perseguição ao jogador } } //Minhas Funções private void OnTriggerEnter(Collider other) { seguir = false; areaDano = true; StartCoroutine(Ataque()); //começa a corrotina Debug.Log("Entrou no trigger!"); } private void OnTriggerExit(Collider other) { seguir = true; areaDano = false; StopCoroutine(Ataque()); Debug.Log("Saiu do trigger!"); } //Corrotinas IEnumerator Ataque() { while(areaDano) { player.GetComponent<Player>().vida -= 0.1f; //vai acessar o GameObject Jogador(player) e acessar o - script Player - que está dentro do Game Object(Player), assim acessando a variavel - vida - do script Player yield return new WaitForSeconds(1.5f); //intervalo de tempo para esperar até refazer a corrotina - age, espera 1.5, age novamente } } } // ------------- SCRIPT CAMPO DE VISAO -----------------// using System.Collections; using System.Collections.Generic; using UnityEngine; public class CampoDeVisao : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } //Minhas funções private void OnTriggerEnter(Collider other) { if(other.gameObject.CompareTag("Player")) //se o objeto que entrar dentro do campo de visao tiver a tag Player { transform.parent.gameObject.GetComponent<AI_Zumbie>().seguir = true; //pega o objeto que é pai do objeto que tem o scrip // ativa a var seguir do script do pai(AI_Zumbie) } } private void OnTriggerExit(Collider other) { if (other.gameObject.CompareTag("Player")) { transform.parent.gameObject.GetComponent<AI_Zumbie>().seguir = false; // ativa a var seguir do script do pai(AI_Zumbie) } } }

7 Respostas