Problema de Colisão com IA's
2 participantes
Página 1 de 1
Problema de Colisão com IA's
Pessoal estou tendo problema com 2 IA's que eu fiz e eu não estou sabendo resolver, alguem pode me da uma ajuda pfv?
IA 1
Pessoal estou fazendo uma IA que vai ficar debaixo d'água, pra resumir é uma IA de crocodilo, eu queria que ela seguisse meu player para cima do terreno, o problema é o seguinte, ela segue meu player, porém quando ela se aproxima do chão, ela não sobe, eu ja tentei de tudo, até mesmo setar um novo Y no update, e mesmo assim ela continua entrando no terreno, não sei mais como proceder.
IA 2
A outra IA apresenta o mesmo problema, só que nesse caso ela é uma IA terrestre, eu dou um input no mouse que liga um trigger, que devia fazer essa IA se afastar e ir para algum waypoint, o problema aqui é o seguinte, ela colide com o trigger mas não volta, ela sempre continua seguindo meu player, o máximo q eu consegui fazer pra arrumar, foi fazer ela parar de seguir e ficar parada.
ja tentei de tudo pra resolver esses 2 casos, mas não consigo chegar a lugar algum.
Agradeço a ajuda.
IA 1
Pessoal estou fazendo uma IA que vai ficar debaixo d'água, pra resumir é uma IA de crocodilo, eu queria que ela seguisse meu player para cima do terreno, o problema é o seguinte, ela segue meu player, porém quando ela se aproxima do chão, ela não sobe, eu ja tentei de tudo, até mesmo setar um novo Y no update, e mesmo assim ela continua entrando no terreno, não sei mais como proceder.
IA 2
A outra IA apresenta o mesmo problema, só que nesse caso ela é uma IA terrestre, eu dou um input no mouse que liga um trigger, que devia fazer essa IA se afastar e ir para algum waypoint, o problema aqui é o seguinte, ela colide com o trigger mas não volta, ela sempre continua seguindo meu player, o máximo q eu consegui fazer pra arrumar, foi fazer ela parar de seguir e ficar parada.
ja tentei de tudo pra resolver esses 2 casos, mas não consigo chegar a lugar algum.
Agradeço a ajuda.
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Re: Problema de Colisão com IA's
Talvez com imagens e/ou postagem dos scripts seria melhor para resolver seu caso.
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema de Colisão com IA's
Desculpa '-' esqueci de bota os scripts
- IA_1:
- Código:
public bool pode_ir;
public bool seguiu;
public bool pode_sortear;
public float distancia1;
public float dist_Player;
public bool pode_ir_jacare;
public float distancia_rio;
public int caminho;
public Transform player;
public Transform Jack;
public Transform Rio;
public Transform[] Ways;
public NavMeshAgent agnt;
public GameObject Player_cam;
public GameObject This_cam;
public bool saiu;
// Use this for initialization
void Start ()
{
pode_sortear = true;
Sorteia ();
}
// Update is called once per frame
void Update ()
{
if (saiu == true) {
}
transform.position = new Vector3(transform.position.x,Ways [caminho].position.y,transform.position.z);
distancia1 = Vector3.Distance (Jack.position, Ways[caminho].position);
dist_Player = Vector3.Distance (transform.position, player.position);
distancia_rio = Vector3.Distance (transform.position, Rio.position);
if (dist_Player <= 5) {
SceneManager.LoadScene ("Game_Over");
}
transform.position = Vector3.MoveTowards (transform.position, Ways [caminho].position, 0.01f);
if (transform.position == Ways [caminho].position) {
Sorteia ();
}
if (dist_Player < 30) {
pode_ir = true;
}
// if (distancia_rio > 30) {
// pode_ir = false;
// Sorteia ();
// }
if (pode_ir == true) {
if (transform.position != player.position) {
transform.position = Vector3.MoveTowards (transform.position, player.position, 0.1f);
}
Quaternion.LookRotation (player.position);
transform.position = Vector3.MoveTowards (transform.position, player.position, 0.1f);
}
if (dist_Player < 5) {
Player_cam.SetActive (false);
This_cam.SetActive (true);
}
}
public IEnumerator pega_p ()
{
yield return new WaitForSeconds (5);
pode_ir = true;
}
void Sorteia ()
{
caminho = Random.Range (0, 3);
}
void OnTriggerExit(Collider Saiu){
if (Saiu.gameObject.tag == "Colisao_IA") {
saiu = true;
StartCoroutine (Volta_Pro_Rio());
}
}
IEnumerator Volta_Pro_Rio(){
yield return new WaitForSeconds (30);
Sorteia ();
}
void OnCollisionEnter(Collision Other){
if (Other.gameObject.tag == "Player") {
SceneManager.LoadScene ("Game_Over");
print (1);
}
if (Other.gameObject.tag == "Chão") {
transform.position = new Vector3 (transform.position.x, player.position.y, transform.position.z);
}
}
void OnCollisionStay(Collision Other){
if (Other.gameObject.tag == "Player") {
SceneManager.LoadScene ("Game_Over");
print (2);
}
}
void OnCollisionExit(Collision Other){
if (Other.gameObject.tag == "Player") {
SceneManager.LoadScene ("Game_Over");
print (3);
}
}
public void OnTriggerEnter (Collider Jack)
{
if (Jack.gameObject.tag == "Crocodilo_2") {
Sorteia ();
}
}
- IA_2:
- Código:
public float distancia;
public float distancia_1;
public bool volta;
public bool sort;
public bool pos;
public bool pode_voltar;
public bool sort_ida;
public AudioSource feedback_d_aprox;
public AudioSource rugido;
public BoxCollider n_trigger;
public BoxCollider trigger;
public GameObject This_cam;
public GameObject Player_cam;
public NavMeshAgent agnt;
public Transform Player;
public PlayerController Player_Script;
//PONTOS
public Transform[] Pontos;
// public Transform Ponto_1;
// public Transform Ponto_2;
// public Transform Ponto_3;
// public Transform Ponto_4;
// public Transform Ponto_5;
// public Transform Ponto_6;
// public Transform Ponto_7;
// public Transform Ponto_8;
// public Transform Ponto_9;
// public Transform Ponto_10;
// public Transform Ponto_11;
// public Transform Ponto_12;
// public int sort_count;
public int pontos_index;
public Noite Script_N;
// Use this for initialization
void Start ()
{
sort_ida = true;
volta = true;
pontos_index = Random.Range (1, 4);
n_trigger.enabled = false;
trigger.enabled = true;
pos = false;
This_cam.SetActive (false);
Player_cam.SetActive (true);
sort = false;
}
// Update is called once per frame
void Update ()
{
distancia = Vector3.Distance (Player.position, transform.position);
Vector3 Objetivo = Pontos [pontos_index].position;
transform.LookAt (Objetivo);
agnt.SetDestination (Pontos [pontos_index].position);
// if (pontos_index == 1) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_1.position);
// }
//
// if (pontos_index == 2) {
// agnt.SetDestination (Ponto_2.position);
// }
// if (pontos_index == 3) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_3.position);
// }
//
// if (pontos_index == 4) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_4.position);
// }
//
// if (pontos_index == 5) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_5.position);
// }
//
// if (pontos_index == 6) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_6.position);
// }
// if (pontos_index == 7) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_7.position);
// }
//
// if (pontos_index == 8) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_8.position);
// }
//
// if (pontos_index == 9) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_9.position);
// }
//
// if (pontos_index == 10) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_10.position);
// }
// if (pontos_index == 11) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_11.position);
// }
//
// if (pontos_index == 12) {
// transform.LookAt (Objetivo);
// agnt.SetDestination (Ponto_12.position);
// }
//
// if (transform.position.x == Ponto_1.position.x && transform.position.z == Ponto_1.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_2.position.x && transform.position.z == Ponto_2.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_3.position.x && transform.position.z == Ponto_3.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_4.position.x && transform.position.z == Ponto_4.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_5.position.x && transform.position.z == Ponto_5.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_6.position.x && transform.position.z == Ponto_6.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_7.position.x && transform.position.z == Ponto_7.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_8.position.x && transform.position.z == Ponto_8.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_9.position.x && transform.position.z == Ponto_9.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_10.position.x && transform.position.z == Ponto_10.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_11.position.x && transform.position.z == Ponto_11.position.z && distancia > 10) {
// Sorteia_Caminho ();
// } else if (transform.position.x == Ponto_12.position.x && transform.position.z == Ponto_12.position.z && distancia > 10) {
// Sorteia_Caminho ();
// }
if (transform.position.x == Pontos [pontos_index].position.x && transform.position.z == Pontos [pontos_index].position.z && distancia > 10) {
Sorteia_Caminho ();
}
if (distancia < 40 && Player_Script.respiracao > 0 && sort_ida == false) {
agnt.SetDestination (Player.position);
}
if (distancia < 40 && Player_Script.respiracao == 0 && Player_Script.click == false) {
Sorteia_Caminho ();
}
if (distancia < 10) {
Objetivo = Player.position;
transform.LookAt (Objetivo);
agnt.SetDestination (Player.position);
if (!rugido.isPlaying) {
rugido.Play ();
}
Player_cam.SetActive (false);
This_cam.SetActive (true);
}
}
void OnCollisionEnter (Collision other)
{
if (other.gameObject.tag == "Player") {
SceneManager.LoadScene ("Game_Over");
}
if (other.gameObject.tag == "Tocha") {
if (Player_Script.luz.range > 0) {
Sorteia_Caminho ();
}
}
if (other.gameObject.tag == ("Floresta")) {
if (n_trigger.enabled == true) {
n_trigger.enabled = false;
}
}
}
void OnTriggerEnter (Collider safe)
{
if (safe.gameObject.tag == "Safe_Zone") {
Sorteia_Caminho ();
}
}
void OnTriggerStay (Collider safe)
{
if (safe.gameObject.tag == "Safe_Zone") {
if (sort_ida == true) {
Sorteia_Caminho ();
sort_ida = false;
}
}
if (safe.gameObject.tag == "Tocha") {
if (sort_ida == true) {
Sorteia_Caminho ();
sort_ida = false;
}
}
}
void OnTriggerExit (Collider saiu)
{
if (saiu.gameObject.tag == "Safe_Zone") {
sort_ida = true;
}
if (saiu.gameObject.tag == "Tocha") {
sort_ida = true;
}
}
void Sorteia_Caminho ()
{
if (Script_N.fase == 1) {
pontos_index = Random.Range (0, 3);
}
if (Script_N.fase == 2) {
pontos_index = Random.Range (0, 7);
}
if (Script_N.fase == 3) {
pontos_index = Random.Range (0, 11);
}
Player_Script.click = true;
}
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Re: Problema de Colisão com IA's
Caramba hein, que grandinho kk.. Mas enfim, não entendi qual o problema que você está tendo.. É dele atravessar o chão? Ou dele não conseguir fazer isso?
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema de Colisão com IA's
o da IA 1 o problema que eu estou tendo é o seguinte, meu terreno ele tem algumas elevações por causa do raio, o crocodilo, está nesse rio, acontece o seguinte, quando meu player se aproxima do rio, o crocodilo corre atrás dele, até ai normal, o problema ta no momento que o crocodilo deveria subir pra terra, ele n sobe tipo, ele continua seguindo só q debaixo da terra
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Re: Problema de Colisão com IA's
Hm.. Já tentou usar o Rigidbody2D? Principalmente para seguir o jogador..
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema de Colisão com IA's
o jogo é 3D '-'
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Re: Problema de Colisão com IA's
mas se eu usar um rigidbody eu n vo ter problema com a fisica do game?
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Re: Problema de Colisão com IA's
Ah, entendi, é 3D. Não, mas se você fizer errado, claro, terá problemas com a física, mas se fizer tudo corretamente, dará certo.. Aliás.. uma imagem faz a diferença..
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema de Colisão com IA's
vc quer q eu coloque imagem de q? do script?
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Re: Problema de Colisão com IA's
Não, do que ocorre.
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema de Colisão com IA's
Imagem
pronto, tipo nessa imagem ele não está entrando, mas ele também não sobe o terreno pra ir atrás do player
pronto, tipo nessa imagem ele não está entrando, mas ele também não sobe o terreno pra ir atrás do player
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Re: Problema de Colisão com IA's
PS: coloquei a imagem no google drive, só clicar no link
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Re: Problema de Colisão com IA's
calma ai, o script q eu postei é do jacaré errado, o certo é esse aqui
- Jacaré_certo:
- Código:
public bool pode_ir;
public bool seguiu;
public bool pode_sortear;
public float distancia1;
public float distancia_rio;
public float dist_Player;
public bool pode_ir_jacare;
public int caminho;
public Transform player;
public Transform Jack;
public Transform[] Ways;
public Transform Rio;
public NavMeshAgent agnt;
public GameObject Player_cam;
public GameObject This_cam;
public bool saiu;
// Use this for initialization
void Start ()
{
pode_sortear = true;
Sorteia ();
}
// Update is called once per frame
void Update ()
{
if (saiu == true) {
transform.position = new Vector3 (transform.position.x, player.position.y, transform.position.z);
}
transform.position = new Vector3(transform.position.x,Ways [caminho].position.y,transform.position.z);
distancia1 = Vector3.Distance (Jack.position, Ways[caminho].position);
dist_Player = Vector3.Distance (transform.position, player.position);
distancia_rio = Vector3.Distance (transform.position, Rio.position);
if (dist_Player <= 3) {
SceneManager.LoadScene ("Game_Over");
}
transform.position = Vector3.MoveTowards (transform.position, Ways [caminho].position, 0.01f);
if (transform.position == Ways [caminho].position) {
Sorteia ();
}
// if (transform.position.x == Ways [caminho].position.x / 0.5f && transform.position.z == Ways [caminho].position.z / 0.5f ) {
// Sorteia ();
// }
if (dist_Player < 30) {
pode_ir = true;
}
// if (dist_Player > 30) {
// pode_ir = false;
// Sorteia ();
// }
if (distancia_rio > 30) {
pode_ir = false;
Sorteia ();
}
if (pode_ir == true) {
if (dist_Player < 5) {
transform.position = new Vector3 (transform.position.x, player.position.y, transform.position.z);
}
if (transform.position != player.position) {
transform.position = Vector3.MoveTowards (transform.position, player.position, 0.1f);
}
Quaternion.LookRotation (player.position);
transform.position = Vector3.MoveTowards (transform.position, player.position, 0.1f);
}
if (dist_Player < 5) {
Player_cam.SetActive (false);
This_cam.SetActive (true);
}
}
public IEnumerator pega_p ()
{
yield return new WaitForSeconds (5);
pode_ir = true;
}
void Sorteia ()
{
caminho = Random.Range (0, 3);
}
void OnTriggerExit(Collider Saiu){
if (Saiu.gameObject.tag == "Colisao_IA") {
transform.position = new Vector3 (transform.position.x, 8.51f, transform.position.z);
StartCoroutine (Volta_Pro_Rio());
}
}
IEnumerator Volta_Pro_Rio(){
yield return new WaitForSeconds (30);
Sorteia ();
}
void OnCollisionEnter(Collision Other){
if (Other.gameObject.tag == "Player") {
SceneManager.LoadScene ("Game_Over");
}
}
void OnCollisionStay(Collision Other){
if (Other.gameObject.tag == "Player") {
SceneManager.LoadScene ("Game_Over");
}
}
void OnCollisionExit(Collision Other){
if (Other.gameObject.tag == "Player") {
SceneManager.LoadScene ("Game_Over");
}
}
public void OnTriggerEnter (Collider Jack)
{
if (Jack.gameObject.tag == "Crocodilo") {
Sorteia ();
}
}
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Re: Problema de Colisão com IA's
Não deu para entender direito, mas pelo que vi, acho que o tranform.MoveToWards você mexe com apenas o transform, acho melhor você usar rigidbody.velocity para fazer isso..
NKKF- ProgramadorMaster
- PONTOS : 4818
REPUTAÇÃO : 574
Idade : 20
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras :
Re: Problema de Colisão com IA's
kra eu só preciso fazer ele subir a elevação do terreno basicamente é isso
agora e pro outro caso. q a IA n respeita o trigger? como q eu procedo?
agora e pro outro caso. q a IA n respeita o trigger? como q eu procedo?
YmKx- Avançado
- PONTOS : 2962
REPUTAÇÃO : 8
Idade : 27
Respeito as regras :
Tópicos semelhantes
» [DUVIDA] Problema com colisão de terreno e objeto 3D
» Ajuda problema na colisao 2d
» Problema com script de colisão
» Problema de colisão com IA e NavMesh
» Colisão
» Ajuda problema na colisao 2d
» Problema com script de colisão
» Problema de colisão com IA e NavMesh
» Colisão
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos