Já encontrou um jogo onde os NPC são extremamente eficientes em seguir qualquer mínimo ruído feito pelo jogador?
Ou o caso oposto, em que os NPCs ficam parados andando contra a parede? Ou que ficam travados em uma pedrinha e você tem que empurrar ele pra continuar a missão?
Este comportamento, muitas vezes até injusto por parte dos inimigos, é determinado pelo Pathfinding no Godot Engine (site oficial) e em outras engines.
O pathfinding é um processo pelo qual um NPC encontra a rota mais eficiente para chegar a um destino. Em Godot 4, a técnica de pathfinding mais comumente usada é o algoritmo A*.
Este algoritmo calcula o caminho de menor custo entre dois pontos, levando em conta obstáculos e o terreno do ambiente de jogo.
E com um pouco de prática, você pode criar NPCs inteligentes e envolventes que podem mover-se de forma inteligente pelo ambiente do seu jogo.
Godot 4 oferece uma variedade de recursos para trabalhar com IA e pathfinding. Vamos falar sobre o Pathfinding no Godot e, se você ficar com dúvidas, é só deixar nos comentários.
Conteúdo desde artigo
Pathfinding no Godot 4
Um dos exemplos mais clássicos de Pathfinding vem dos primeiros jogos de Pac-Man, lançados no arcade em 1980, quando tínhamos os fantasmas perseguindo o Pac-Man pelo labirinto.
Entre eles, o fantasma vermelho, Blinky, é descrito como “o mais agressivo dos fantasmas enquanto persegue Pac-Man incansavelmente.”
Em termos de jogabilidade, Blinky buscava sempre o caminho mais curto e rápido para chegar ao objetivo. Isso é Pathfining!
Os outros fantasmas também tinham seus próprios caminhos. Alguns usavam o caminho mais curto para emboscar Pac-Man e outros seguiam caminhos maiores e fugiam dele.
Este é só um dos casos de programação de caminhos, mas, com o Pathfinding no Godot 4, você pode criar NPCs que podem:
- Seguir o jogador
- Perseguir o jogador
- Fugir do jogador
- Explorar o ambiente
- Resolver quebra-cabeças
No entanto, simplesmente encontrar o caminho mais curto nem sempre é suficiente. Às vezes, os NPCs precisam ser capazes de perseguir o jogador ou fugir dele, e outros fatores, como a velocidade do NPC e a presença de outros NPCs, podem influenciar a rota ótima.
Godot 4 também oferece algoritmos de pathfinding dinâmicos, que permitem aos NPCs adaptarem seu caminho em tempo real. Isso é especialmente útil para jogos de ação rápida, onde o ambiente pode mudar rapidamente e os NPCs precisam se adaptar às mudanças.
Otimizando as técnicas de Pathfinding
Otimizar o pathfinding é essencial para garantir que seu jogo seja suave e responsivo. Aqui estão algumas dicas para otimizar as técnicas de pathfinding em Godot 4:
- Uso eficiente do A:* Embora o algoritmo A* seja eficiente, o uso exaustivo em um grande número de NPCs pode impactar o desempenho do seu jogo. É aconselhável usá-lo com moderação, especialmente em jogos com muitos NPCs.
- Pathfinding Hierárquico: Este é um método avançado que envolve a divisão do ambiente de jogo em uma hierarquia de blocos, onde os NPCs só executam o A* dentro de um bloco específico, reduzindo significativamente a quantidade de cálculos necessários.
- Otimização da malha de navegação: A malha de navegação representa o ambiente navegável do jogo. Otimizá-la pode melhorar o desempenho do pathfinding. Por exemplo, mantendo a malha de navegação simples e com menos polígonos, você pode reduzir o número de cálculos necessários para o pathfinding.
Exemplos práticos
A inteligência artificial (IA) é uma área da ciência da computação que se concentra na criação de sistemas que podem raciocinar e tomar decisões como seres humanos.
A IA está se tornando cada vez mais importante no desenvolvimento de jogos, pois permite criar personagens não jogáveis (NPCs) que podem tomar decisões complexas, responder a ações dos jogadores e mover-se de forma inteligente pelo ambiente do jogo. Aqui estão alguns exemplos práticos de como usar IA e pathfinding em Godot 4:
- Um jogo de ação em primeira pessoa em que os inimigos perseguem o jogador: Neste jogo, você pode usar o algoritmo A* para fazer os inimigos seguir o jogador de forma inteligente. Você pode também usar o pathfinding hierárquico para melhorar o desempenho do jogo, dividindo o ambiente em blocos menores.
- Um jogo de estratégia em tempo real em que as unidades exploram o ambiente: Neste jogo, você pode usar o pathfinding para fazer as unidades explorarem o ambiente de forma eficiente. Você pode também usar o pathfinding dinâmico para adaptar o caminho das unidades às mudanças no ambiente.
- Um jogo de quebra-cabeças em que os jogadores precisam resolver quebra-cabeças para avançar: Neste jogo, você pode usar o pathfinding para fazer os jogadores encontrarem a solução para os quebra-cabeças. Você pode também usar o pathfinding dinâmico para adaptar o caminho dos jogadores às mudanças no ambiente.
Configuração uma cena 2D
Os seguintes passos mostram a configuração básica para uma navegação mínima viável em 2D. Utiliza o NavigationServer2D e um NavigationAgent2D para movimento de caminho. Se ficar com dúvidas, consulte a documentação oficial.
- Adicione um Nó NavigationRegion2D à cena.
- Clique no nó da região e adicione um novo Recurso NavigationPolygon ao nó da região.
- Defina a área de navegação móvel com a ferramenta de desenho NavigationPolygon.
- Adicione um nó CharacterBody2D na cena com uma forma básica de colisão e um sprite ou malha para visualização.
- Adicione um nó NavigationAgent2D abaixo do nó do personagem.
- Adicione o seguinte script ao nó CharacterBody2D. Certifique-se de definir um alvo de movimento após a cena ter sido carregada completamente e o NavigationServer ter tempo para sincronizar.
extends CharacterBody2D
var movement_speed: float = 200.0
var movement_target_position: Vector2 = Vector2(60.0,180.0)
@onready var navigation_agent: NavigationAgent2D = $NavigationAgent2D
func _ready():
# These values need to be adjusted for the actor's speed
# and the navigation layout.
navigation_agent.path_desired_distance = 4.0
navigation_agent.target_desired_distance = 4.0
# Make sure to not await during _ready.
call_deferred("actor_setup")
func actor_setup():
# Wait for the first physics frame so the NavigationServer can sync.
await get_tree().physics_frame
# Now that the navigation map is no longer empty, set the movement target.
set_movement_target(movement_target_position)
func set_movement_target(movement_target: Vector2):
navigation_agent.target_position = movement_target
func _physics_process(delta):
if navigation_agent.is_navigation_finished():
return
var current_agent_position: Vector2 = global_position
var next_path_position: Vector2 = navigation_agent.get_next_path_position()
velocity = current_agent_position.direction_to(next_path_position) * movement_speed
move_and_slide()
Nota: A malha de navegação define a área onde um ator pode ficar e mover-se com seu centro. Deixe margem suficiente entre as bordas do polígono de navegação e objetos de colisão para não fazer com que atores que seguem o caminho fiquem repetidamente presos na colisão.
Quer saber mais sobre Pathfiding?
Implementar AI e pathfinding eficazmente pode ser bastante desafiador. É um campo profundo que requer um bom entendimento teórico, bem como habilidades técnicas. Se você quer aprofundar seu conhecimento nesta área e criar jogos mais complexos e envolventes, considere se inscrever em nosso curso de IA e Pathfinding em Godot 4.
Ele vai te ajudar a entender os conceitos de IA e pathfinding de forma aprofundada, através de exemplos de código e projetos práticos. Se interessou? Preencha este formulário aqui para receber mais informações sobre o curso. Não perca essa oportunidade de levar seus jogos a um novo nível!
FAQ Rápido
Qual é o principal algoritmo de pathfinding no Godot 4?
O principal algoritmo de pathfinding é o A*. Ele calcula o caminho de menor custo entre dois pontos, considerando obstáculos e o terreno do jogo.
Como os NPCs adaptam seus caminhos em tempo real em Godot 4?
Godot 4 oferece algoritmos de pathfinding dinâmicos, permitindo que os NPCs ajustem seus caminhos em tempo real para se adaptar a mudanças rápidas no ambiente do jogo.
O que é Pathfinding em jogos e por que é importante?
Pathfinding é o processo pelo qual personagens em um jogo encontram o caminho mais eficiente de um ponto a outro. É crucial para NPCs se movimentarem de forma inteligente pelo ambiente do jogo, evitando obstáculos e alcançando seus destinos.
Qual é a importância de adaptar o Pathfinding em tempo real?
Em jogos dinâmicos, onde o ambiente pode mudar rapidamente, ter pathfinding adaptável permite que os NPCs se ajustem às mudanças, garantindo movimento contínuo e interação inteligente com o ambiente.
Fale conosco nos comentários e diga oque achou dessa matéria e aproveite para ler mais notícias e matérias, como por exemplo, sobre motivos para usar o Godot, no nosso site.