Um aldeão que atravessa a praça, contorna uma carroça e chega à oficina parece conhecer o lugar. Para o jogador de um RPG single-player, essa pequena ação ajuda a vender a ideia de um mundo habitado. Para quem desenvolve, porém, há perguntas diferentes escondidas na mesma cena: para onde o personagem quer ir, por onde ele pode passar e como reage ao que se move em sua frente? Chamar tudo isso simplesmente de IA do NPC esconde a divisão mais útil para projetar e testar o comportamento.
É possível criar esse efeito sem diálogo gerado por modelo de linguagem. A documentação de navegação da Unreal descreve busca de caminhos por uma malha navegável; a documentação de árvores de comportamento descreve outra camada, encarregada de escolher ações segundo informações disponíveis. Essas peças resolvem problemas distintos e podem ser combinadas sem transformar cada decisão do personagem em uma geração de texto.
Destino, rota e desvio não são a mesma decisão

Imagine, como exemplo hipotético, um ferreiro que vai da forja até um poço. A rotina do jogo define o destino: o poço. O sistema de navegação calcula uma rota possível entre os pontos. Se um viajante cruzar a passagem, um mecanismo de desvio local pode ajustar a movimentação para evitar o encontro. A ordem importa: um desvio não decide que o ferreiro precisa buscar água, e uma rotina narrativa não desenha, sozinha, uma trajetória segura pelo cenário.
Na descrição oficial da Unreal, a malha de navegação é gerada a partir da geometria de colisão; suas áreas formam um grafo em que custos influenciam a rota escolhida. O mesmo documento distingue modos de geração da malha e menciona sistemas para contornar obstáculos dinâmicos e outros agentes. Para um RPG com portas, pontes e áreas de perigo, isso sugere uma pergunta de design: quais superfícies são transitáveis e quais devem custar mais ao personagem? O motor oferece mecanismos, mas a escolha de onde um NPC pode andar continua ligada às regras do jogo.
Para quem joga, a diferença aparece quando o personagem dá a volta em uma parede, mas para diante de uma pessoa que acabou de parar em seu caminho. O trajeto pelo cenário e o desvio de objetos móveis exigem respostas diferentes. Na documentação do NavigationAgent da Godot, o desvio é explicitamente separado da busca de caminhos: ele não altera a rota calculada e trabalha como camada adicional para objetos móveis. Portanto, ativar desvio não conserta automaticamente uma malha que deixou uma porta fora da área navegável.
O que faz um NPC parecer ter uma rotina

Uma rota correta ainda pode resultar num personagem sem propósito: ele anda bem, mas escolhe destinos aleatórios ou insiste em cumprir uma tarefa que perdeu o sentido. Uma forma de organizar essa escolha é representar estados e condições. Na documentação das Behavior Trees da Unreal, a árvore executa ramos de lógica e consulta chaves em um Blackboard para decidir qual ramo usar. O exemplo da própria documentação mostra uma condição que muda entre fugir e se mover pelo ambiente.
Num protótipo hipotético de RPG, o NPC poderia ter as condições: a oficina está aberta, o jogador iniciou uma conversa, o destino ainda está acessível. A árvore ou outra lógica equivalente escolheria uma ação; a navegação cuidaria do percurso. Esse arranjo não é uma receita obrigatória da Unreal nem prova de que todo jogo comercial o usa. É uma maneira de separar a intenção dramática da execução física para que um erro possa ser localizado.
Se o aldeão continua indo ao poço durante uma cena de ataque, vale revisar a condição que escolhe o destino antes de mexer no cálculo da rota. Se ele decide corretamente procurar abrigo, mas bate numa escada, o foco muda para o mapa navegável, as conexões e as dimensões do agente. A separação também ajuda o designer a escrever comportamentos deliberados: uma pausa antes de abrir a loja pode ser uma regra de encenação, não uma falha de busca de caminhos.
Como começar num projeto pequeno
Em vez de povoar uma cidade inteira, monte uma cena de teste com um personagem, dois destinos e um obstáculo. Primeiro confirme que as áreas caminháveis estão representadas na navegação. Depois escolha o destino por uma regra simples, como alternar entre casa e oficina. Por fim introduza outra pessoa em movimento para observar o desvio local. É uma proposta de prototipagem, não uma promessa de desempenho para qualquer motor.
Na Godot, os NavigationAgents combinam consulta de caminho, acompanhamento da rota e desvio para nós 2D ou 3D. A documentação explica que definir a posição-alvo provoca a consulta e que o próximo ponto é obtido com get_next_path_position(). Há um detalhe fácil de perder: o sistema não move o personagem pai automaticamente; o desenvolvedor precisa aplicar seu próprio código de movimento. Também convém verificar se o caminho já terminou antes de continuar pedindo pontos, para evitar tremores no destino.
Em Unreal, a documentação de navegação mostra que a malha admite áreas com custos diferentes e conexões entre regiões não contíguas. Isso permite pensar em travessias e preferências de rota, mas não significa que o motor saiba sozinho qual caminho faz sentido para a história. O protótipo deve incluir um caso em que o destino fica temporariamente indisponível: ali se descobre se o NPC espera, escolhe outro lugar ou fica preso repetindo uma tentativa.
Faça os testes como jogador e como depurador. Observe se o personagem alcança a entrada certa, se atravessa objetos, se muda de direção sem motivo e se interrompe a caminhada para uma conversa. Depois repita a cena com um obstáculo móvel. A vantagem do cenário pequeno é permitir que cada camada seja avaliada isoladamente, antes de multiplicar personagens e caminhos possíveis.
Erros comuns e o custo de corrigir tudo com mais IA
Um NPC que muda de rumo o tempo todo pode estar recebendo um novo destino com frequência excessiva. A orientação de desempenho da Godot aponta redefinir o caminho a cada quadro como causa comum de problemas e recomenda evitar reinicializações e consultas desnecessárias. Se o alvo é o jogador, por exemplo, a recomendação é só atualizar o destino quando ele se afastou o bastante da posição anterior, em vez de recalcular a rota continuamente.
Outro erro é atribuir ao desvio local a responsabilidade por paredes e degraus que não foram tratados na navegação. Na explicação da Godot, o desvio opera sem informação da malha de navegação ou da colisão física; por isso não substitui o planejamento do percurso. Um obstáculo permanente pede uma correção do espaço navegável ou da regra de acesso, enquanto um personagem que passa à frente pode pedir uma reação de desvio.
Também há o custo de processar muitas consultas ao mesmo tempo. A documentação de otimização da Godot recomenda distribuir atualizações dos agentes em grupos, não recalcular todos os caminhos no mesmo quadro e evitar malhas excessivamente detalhadas. Para um desenvolvedor indie, isso é um bom motivo para medir uma vila pequena antes de prometer uma multidão. Não há número universal de NPCs seguro: a cena, a geometria e a frequência das consultas mudam o resultado.
Modelos generativos podem ter um lugar em outras camadas, como a elaboração de falas, mas não resolvem por si só uma porta bloqueada nem criam uma superfície transitável. Antes de acrescentar uma ferramenta complexa, pergunte qual defeito o jogador realmente percebe. Um destino mal escolhido pede revisão de regras; um percurso impossível pede revisão de navegação; colisões entre transeuntes pedem atenção ao movimento local. A boa ilusão de vida vem da consistência entre essas respostas, não do tamanho do componente chamado IA.
Fontes
- Unreal Engine: Navigation System
- Unreal Engine: Behavior Trees
- Godot: Using NavigationAgents
- Godot: Optimizing navigation performance
Texto preparado com apoio de IA e revisado por Marcos (editor) antes da publicação.


