Godot Version
Godot 4.2.2
Question
Pathfinding obstacles don’t work,player passes through obstacles, my scene looks like this:
The code I use is this:
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():
navigation_agent.path_desired_distance = 4.0
navigation_agent.target_desired_distance = 4.0
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()
pass
func _process(delta: float) -> void:
movement_target_position = get_global_mouse_position()
set_movement_target(movement_target_position)
pass
Is your obstacle on layer 1? You have set up your navigation to only consider layer 1, which is typically the player and not the obstacle?
yes, all layers are set to 1 by default
I made the obstacle physical using StaticBody2D, but it just slides over it instead of going around it =(
Looks like you haven’t turned on avoidance, you also need to use the dedicated methods and signals to use avoidance, see here
smix8
May 12, 2024, 12:07am
6
NavigationObstacle in Godot 4.2 is for avoidance only, it does nothing for pathfinding.
You need to remove the navigation mesh below the obstacle if you do not want paths to go through it.
1 Like
I need to get around this obstacle, how can I do this? my code written above does not work with Navigation Obstacle 2D, it just rests on it and that’s it
additional question, can NavigationObstacle2D somehow take the shape of a sprite, or is it just a point with a center?
smix8
May 20, 2024, 4:06pm
8
For the pathfinding you (re)bake the navigation mesh so that the shape of your obstacle is not included in the navigation mesh surface. If you are on Godot 4.3dev6 or later the obstacle node has a new property “affect_navigation_mesh” so that is included in a navigation mesh baking process like any other static geometry. On older Godot versions without that property just add e.g. a physics staticbody with a shape like the obstacle and set it to a collision layer that gets only parsed by the navigation mesh baking.
Navigation obstacles have two modes, dynamic and static. If you want to define a “shape” you use the static variant which means you define the vertices outline. See obstacle documentation for details here Using NavigationObstacles — Godot Engine (latest) documentation in English
2 Likes
If you have time, could you make a minimal example with NavigationObstacle2D?
I will be very grateful!
imekon
January 27, 2026, 2:34pm
10
Here’s my sample - seems to need to rebake every frame but I got dynamic obstacles working - though not sure why it needs rebaking: GitHub - imekon/navigation-test4: Navigator 2D 'static' obstacles
* Video without debug
* Video with debug
imekon
January 27, 2026, 10:11pm
11
I found rebaking was needed even for dynamic obstacles but not every frame - every second worked fine for me