Dando continuidade ao post sobre o comportamento de patrulha em inimigos 2D, o post Como criar Inteligência artificial estilo perseguição para inimigos no Unity 2D ensina de maneira simples a implementação do comportamento de perseguição.
Como criar inteligência artificial estilo perseguição para inimigos no Unity 2D
O comportamento de perseguição consiste no aumento da velocidade do objeto inimigo quando o jogador entra no campo de visão do mesmo. Para a criação do campo de visão utilizaremos o Raycast, também utilizado para criar o comportamento de patrulha. Se ainda não viu o nosso post sobre comportamento de patrulha em inimigos 2D, clique aqui e acompanhe o projeto do início!
Para exemplificar a mecânica de perseguição, vamos dar continuidade ao projeto e codificar o script do comportamento seguindo os seguintes passos:
1 – Vá na aba de hierarquia e crie dois empty game objects dentro do seu inimigo, um denominado “CampoDeVisãoInicio” e o outro “CampoDeVisãoFinal”.
2 – Posicione o “CampoDeVisãoInicio” na mesma posição do jogador e o “CampoDeVisãoFinal” um pouco mais a frente do seu inimigo.
3 – Adicione o seu jogador na cena.
4 – Dentro do script do inimigo, previamente criado, vamos adicionar algumas novas variáveis e métodos para o funcionamento do comportamento desejado.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Inimigo : MonoBehaviour { public Transform DetectaChao; public float distancia = 3; public bool olhandoParaDireita; public float velocidade = 4; public float velocidadePerseguicao = 7; public bool spot = false; //booleana para saber se o jogador esta dentro do campo de visão public Transform target; //alvo que o inimigo vai perseguir, nesse caso o jogador public Transform inicioCP; //inicio do campo de visão public Transform fimCP; //final do campo de visão void Start() { olhandoParaDireita = true; } void Update() { Patrulha(); Raycasting(); Persegue(); } public void Patrulha() { transform.Translate(Vector2.right * velocidade * Time.deltaTime); RaycastHit2D groundInfo = Physics2D.Raycast(DetectaChao.position, Vector2.down, distancia); if (groundInfo.collider == false) { if (olhandoParaDireita == true) { transform.eulerAngles = new Vector3(0, -180, 0); olhandoParaDireita = false; } else { transform.eulerAngles = new Vector3(0, 0, 0); olhandoParaDireita = true; } } } public void Raycasting() { Debug.DrawLine(inicioCP.position, fimCP.position, Color.green); spot = Physics2D.Linecast(inicioCP.position, fimCP.position, 1 << LayerMask.NameToLayer("Player")); } public void Persegue() { if (spot == true) { velocidade = velocidadePerseguicao; } else if (spot == false) { velocidade = 4; } } }
Criamos a booleana “spot” para saber se o jogador está no campo de visão do inimigo, a variável “target” para saber quem é o alvo da perseguição, nesse caso, é o jogador. As variáveis inicioCP e fimCp estão relacionadas ao inicio e final do campo de visão do inimigo, respectivamente.
Também adicionamos ao script dois novos métodos; “Raycasting” e “Persegue”. O método Raycasting serve para nos ajudar a identificar o tamanho do campo de visão do inimigo e onde ele está localizado, ele vai criar uma linha verde entre o inicio e o final do campo de visão. Além disso, o método vai atrelar a nossa booleana “spot” ao Raycast criado.
O método “Persegue” diz o que acontece caso o jogador entre no campo de visão do inimigo, nesse caso, vamos aumentar a velocidade do inimigo na direção do jogador.
Observação: Se certifique de que o seu jogador esteja com a tag e layer nomeadas “Player”.
5 – Atrele o seu jogador como alvo, dessa forma, o seu inimigo vai saber quem perseguir! Não esqueça de atrelar também o início e fim do campo de visão para suas respectivas posições.
6 – Clique no play para testar o programa.
Acesse a nossa área de cursos para aprender a desenvolver jogos utilizando as ferramentas Unity, Construct 2, Game Maker e MonoGame. Participe também do nosso grupo de estudos no Facebook.