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.



