Como fazer um NPC perseguir o jogador no Unity usando NavMesh

Neste tutorial, usaremos o sistema NavMesh do Unity para criar um NPC que persegue o Jogador. O NavMesh fornece pathfinding eficiente e evita obstáculos, tornando-o ideal para comportamento de IA em ambientes 3D.

Etapa 1: Configurando a cena

Antes de implementar o NavMesh, precisamos de uma configuração de cena adequada:

  1. Crie um novo projeto 3D em Unity.
  2. Adicione um Plano para servir como solo.
  3. Adicione um Cube ou qualquer modelo 3D para representar o Player. Nomeie-o como Player.
  4. Adicione outro Cubo ou modelo 3D para representar o NPC. Nomeie-o como NPC.
  5. Coloque o Jogador e o NPC em posições diferentes no Plano.

Etapa 2: Assando o NavMesh

Para usar o sistema NavMesh da Unity, precisamos preparar a malha de navegação:

  1. Selecione o plano terrestre na hierarquia.
  2. No Inspetor, clique em Adicionar Componente e adicione um NavMeshSurface.
  3. No componente NavMeshSurface, certifique-se de que o Plano esteja marcado como uma superfície transitável.
  4. Clique no botão Bake no componente NavMeshSurface para gerar o NavMesh.
  5. Opcional: Se você tiver obstáculos (por exemplo, paredes), certifique-se de que eles tenham componentes NavMeshObstacle para bloquear o movimento do NPC.

Etapa 3: Adicionando um NavMeshAgent

Agora, vamos preparar o NPC para usar o pathfinding do Unity:

  1. Selecione o NPC na Hierarquia.
  2. No Inspetor, clique em Adicionar Componente e adicione um NavMeshAgent.
  3. Ajuste as propriedades do NavMeshAgent conforme necessário, como velocidade, aceleração e distância de parada.

Etapa 4: Escrevendo o script de perseguição

Em seguida, criaremos um script para fazer o NPC perseguir o Jogador:

  1. Clique com o botão direito no painel Projeto e selecione Criar > C# Script. Nomeie-o como NPCChase.
  2. Clique duas vezes no script para abri-lo no seu editor de código.
  3. Substitua o código padrão pelo seguinte:
using UnityEngine;
using UnityEngine.AI;

public class NPCChase : MonoBehaviour
{
    public Transform player; // Reference to the player's position
    private NavMeshAgent agent; // Reference to the NavMeshAgent

    void Start()
    {
        // Get the NavMeshAgent component
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        if (player != null)
        {
            // Set the agent's destination to the player's position
            agent.SetDestination(player.position);
        }
    }
}

Etapa 5: Atribuindo o script e a referência do player

Por fim, atribuiremos o script e configuraremos a referência do Player:

  1. Selecione o NPC na Hierarquia.
  2. Arraste e solte o script NPCChase no NPC.
  3. No Inspetor, localize o campo Player no script.
  4. Arraste o GameObject Jogador da Hierarquia para o campo Jogador.

Etapa 6: Testando a cena

Para testar sua configuração:

  1. Pressione o botão Play no Editor Unity.
  2. Mova o jogador (por exemplo, usando o teclado ou a entrada do controle).
  3. Observe o NPC encontrando e perseguindo o Jogador dinamicamente, evitando obstáculos quando aplicável.

Opcional: Personalizando o comportamento

Você pode refinar ainda mais o comportamento do seu NPC:

  • Distância de Parada: Ajuste a Distância de Parada do NavMeshAgent para fazer o NPC parar em um determinado alcance.
  • Prevenção de obstáculos: Garanta que os obstáculos tenham componentes NavMeshObstacle para prevenção precisa.
  • Animações: Use animações para tornar o movimento do NPC mais realista, acionando animações com base na velocidade.

Conclusão

Criamos um NPC que persegue dinamicamente o Jogador usando o sistema NavMesh da Unity. Essa abordagem é robusta e pode ser facilmente expandida para comportamentos de IA mais complexos. Experimente diferentes configurações para adaptar o pathfinding do NPC às necessidades do seu jogo.