extends CharacterBody3D ## NS-14: drives CharacterBody3D toward NavigationAgent3D path. Client-only; not server-authoritative. const MOVE_SPEED: float = 5.0 @onready var _nav: NavigationAgent3D = $NavigationAgent3D func _ready() -> void: # Map sync: avoid querying paths before the navigation map is ready. await get_tree().physics_frame _nav.target_position = global_position func _physics_process(_delta: float) -> void: if _nav.is_navigation_finished(): velocity = Vector3.ZERO move_and_slide() return var next: Vector3 = _nav.get_next_path_position() var dir: Vector3 = next - global_position dir.y = 0.0 if dir.length() < 0.05: velocity = Vector3.ZERO else: velocity = dir.normalized() * MOVE_SPEED move_and_slide()