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:
- Crie um novo projeto 3D em Unity.
- Adicione um Plano para servir como solo.
- Adicione um Cube ou qualquer modelo 3D para representar o Player. Nomeie-o como Player.
- Adicione outro Cubo ou modelo 3D para representar o NPC. Nomeie-o como NPC.
- 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:
- Selecione o plano terrestre na hierarquia.
- No Inspetor, clique em Adicionar Componente e adicione um NavMeshSurface.
- No componente NavMeshSurface, certifique-se de que o Plano esteja marcado como uma superfície transitável.
- Clique no botão Bake no componente NavMeshSurface para gerar o NavMesh.
- 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:
- Selecione o NPC na Hierarquia.
- No Inspetor, clique em Adicionar Componente e adicione um NavMeshAgent.
- 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:
- Clique com o botão direito no painel Projeto e selecione Criar > C# Script. Nomeie-o como NPCChase.
- Clique duas vezes no script para abri-lo no seu editor de código.
- 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:
- Selecione o NPC na Hierarquia.
- Arraste e solte o script NPCChase no NPC.
- No Inspetor, localize o campo Player no script.
- Arraste o GameObject Jogador da Hierarquia para o campo Jogador.
Etapa 6: Testando a cena
Para testar sua configuração:
- Pressione o botão Play no Editor Unity.
- Mova o jogador (por exemplo, usando o teclado ou a entrada do controle).
- 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.