Desenvolvimento Unity

Como criar inteligência artificial estilo perseguição para inimigos no Unity 2D

Gif

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”.

print de tela 2

2 – Posicione o “CampoDeVisãoInicio” na mesma posição do jogador e o “CampoDeVisãoFinal” um pouco mais a frente do seu inimigo.

print de tela 1 print de tela 2

3 – Adicione o seu jogador na cena.

print de tela 3

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.

print de tela 4

6 – Clique no play para testar o programa.

Gif

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.

Danilo Filitto

Sou Mestre em Ciência da Computação pela Universidade Estadual de Maringá – UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná – UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista – UNOESTE.
Atuo na área acadêmica como professor desde 2006. Além de professor sou desenvolvedor de jogos, palestrante e mantenedor dos sites dfilitto e Make Indie Games.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 2.252 outros assinantes

Anúncios

Aprenda a criar seus jogos com os melhores desenvolvedores de jogos

Advertisement

Quer aprender a programar?