godot-ai-navigation

v2026.09.24

AI movement decision router for chase, patrol, crowd, and bake choices on top of NavigationAgent/Server. Use when deciding node agent vs RID server, bake vs obstacle, layer masks, or retarget policy — not for engine navmesh recipes. Keywords: AI navigation, chase retarget, patrol, crowd RVO, bake vs obstacle, NavigationAgent decision tree.

GitHub
安装命令
npx skhub add thedivergentai/godot-ai-navigation
Markdown
SKILL.md

Decision Trees (MANDATORY script triggers)

1. Node agent vs NavigationServer RID

SignalChoicePathfinding script (MANDATORY read)
2D top-down / side-scroller, < ~50 agents, editor-tweakableNavigationAgent2D on CharacterBody2Dsmart_navigation_agent.gd
3D floor/slope nav, < ~50 agents, designer-placed regionsNavigationAgent3D on CharacterBody3DSame script (3D branch); pair with godot-physics-3d for body collision
Hundreds–thousands of simple movers (2D or 3D)RID agents on NavigationServerserver_navigation_setup.gd + low_level_avoidance.gd
Agents stuck / jitteringStuck recovery before retarget spamagent_stuck_detection.gd

2. Bake vs obstacle

SignalChoicePathfinding script (MANDATORY read)
Walkable geometry changed (proc gen, doors)Async parse + bakeasync_dynamic_baking.gd
Moving platform / shifting regionDynamic region managerdynamic_nav_manager.gd
Projectile / rolling hazard pushing agentsRVO obstacle (no full rebake)moving_obstacle_server.gd
Prefer roads over mud/waterRegion enter/travel coststerrain_cost_manager.gd

3. Layers, links, crowds

SignalChoicePathfinding script (MANDATORY read)
Walk / fly / swim (or faction) filtersNavigation layers bitmaskslayer_mask_navigation.gd
Jump / teleport / elevator edgesNavigationLink traversalnav_link_traversal.gd
Formation / anti-clump crowdsLeader-relative offsetsgroup_avoidance_formations.gd
Hot-path query allocsReuse query parameter/result objectsmemory_optimized_queries.gd

Do NOT Load scripts outside the chosen row (e.g. skip RID/server scripts for a single designer-tuned agent; skip async bake when only RVO obstacles move).

4. Chase / patrol retarget policy (AI layer)

  • Chase: Retarget on timer (~0.2s) or distance threshold — never assign target_position every physics frame.
  • Patrol: Advance waypoint only when is_navigation_finished() and is_target_reachable(); on unreachable, pick next or repath.
  • State ownership: Patrol/chase/search transitions belong in godot-state-machine-advanced; this skill only decides how to retarget once a state asks for a destination.

Patrol state handoff (call site): in the patrol state's _physics_process, when the agent finishes a waypoint, call retarget_if_needed(next_waypoint) — do not set target_position directly from the state machine root.

# PatrolState.gd — state machine owns transitions; this skill owns retarget policy
func _physics_process(_delta: float) -> void:
	if nav_agent.is_navigation_finished() and nav_agent.is_target_reachable():
		_ai_nav.retarget_if_needed(_waypoints[_index])
		_index = (_index + 1) % _waypoints.size()
# Threshold retarget — AI policy, not per-frame path spam
const RETARGET_DIST := 1.5
var _last_target: Vector3

func retarget_if_needed(desired: Vector3) -> void:
	if desired.distance_to(_last_target) < RETARGET_DIST:
		return
	nav_agent.target_position = desired
	_last_target = desired

NEVER Do in AI Navigation

  • NEVER set target_position before awaiting physics frame — MUST call_deferred() then await get_tree().physics_frame.
  • NEVER use synchronous runtime bake — Use bake_from_source_geometry_data_async via pathfinding async_dynamic_baking.gd.
  • NEVER poll chase targets every frame — Path recalculation spam.
  • NEVER invent local duplicate nav scripts here — Implement from godot-navigation-pathfinding only.
  • NEVER ignore is_target_reachable() / stuck recovery — Unreachable or stalled agents need policy (agent_stuck_detection.gd).
  • NEVER leave avoidance radius at 0 when avoidance_enabled — Agents pass through each other.
  • NEVER call get_path() every frame — Reuse path query objects (memory_optimized_queries.gd).

Fallback (godot-navigation-pathfinding not installed)

If the sibling skill is unavailable, use this minimal stuck-recovery checklist — do not paste full bake/RID tutorials from memory:

  1. Defer first target_position with call_deferred + await get_tree().physics_frame.
  2. Retarget on timer (~0.2s) or distance threshold — never every frame.
  3. On stall: if !nav_agent.is_target_reachable() or velocity ≈ 0 for N frames, skip waypoint or call get_next_path_position() recovery.
  4. Avoidance: set radius > 0 when avoidance_enabled.
  5. Re-install godot-navigation-pathfinding before shipping async bake or RID crowds.

Expert insights (WHY — keep in body)

  • Deferred first target — WHY: NavigationAgent maps/regions are not ready in _ready(). call_deferred + await physics_frame prevents first-path failure.
  • Retarget policy — WHY: per-frame target_position rebakes paths and spikes CPU. Timer (~0.2 s) or distance threshold only.
  • Unreachable waypoints — WHY: patrol loops stall forever without is_target_reachable() + skip/repath policy.
  • Avoidance radius 0 — WHY: enabled avoidance with zero radius disables separation; agents stack.

Golden Path

  1. Classify the AI need with the decision trees above.
  2. MANDATORY open each linked pathfinding script for the chosen rows — Do NOT Load the rest of that skill's scripts.
  3. Wire retarget/state policy here (timer/threshold + state machine), movement via CharacterBody.
  4. Do NOT Load Official Docs intro recipes unless first-time region bake UI is required (use Reference links).

Deep recipes (on demand)

TopicReference / script
Chase / patrol / crowd AI recipesai-movement-recipes.md

Reference

Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.

Official Documentation

Related Skills

Prerequisites

  • godot-navigation-pathfinding — MANDATORY authoritative NavigationServer scripts (async bake, RID setup, query reuse, stuck detection); this skill has no local scripts/.
  • godot-characterbody-2d — Path corners become CharacterBody velocity via move_and_slide; agent scripts assume a body parent.
  • godot-2d-physics — Collision layers/shapes still block bodies; navmesh is not a physics substitute for walls and triggers.
  • godot-physics-3d — 3D agents share the same split: NavigationServer paths vs RigidBody/CharacterBody collision and slopes.

Complements

Downstream / consumers

  • godot-genre-rts — Unit move commands and RVO crowds consume NavigationAgent/Server patterns directly.
  • godot-genre-tower-defense — Lane/path enemies and dynamic blockers depend on regions, costs, and obstacle updates.
  • godot-genre-stealth — Guard patrols and investigate points are NavigationAgent routes gated by detection state.
  • godot-combat-system — Engage/kite/flank movement issues new targets and stuck recovery on top of paths.
  • godot-monte-carlo-balancer — Simulate chase reachability, travel-time bands, and crowd pressure when tuning AI difficulty.

Master

  • godot-master — Library router and mirrored module entry for this Domain Skill.
发现
标签

此技能尚未发布标签。

版本
最新版本元数据

版本

v2026.09.24

发布时间

2026年9月24日

分类

未分类

许可证

LGPL-3.0

源路径

skills/godot-ai-navigation

默认分支

main

最新提交

4c4d0ff

Tree SHA

4df5616