- Use `CharacterBody2D.move_and_slide()` for player movement — it handles collision resolution and slope movement without manual physics integration.
- Use `SceneTree.change_scene_to_file("res://scenes/Game.tscn")` for scene transitions and `SceneTree.reload_current_scene()` for restarting the current level.
- Access the `SceneTree` via `get_tree()` and use `get_tree().get_nodes_in_group("enemies")` for group-based queries instead of hard-coded node paths.
- Use `AnimationPlayer` with named animations for sprite and property animations — trigger transitions by calling `animation_player.play("run")` from the state machine.
- Use `Tween` for procedural property animations: `create_tween().tween_property(node, "position", target, duration)` instead of manual `lerp` in `_process`.
- Use `NavigationAgent2D`/`3D` with a baked `NavigationRegion` for pathfinding — call `navigation_agent.get_next_path_position()` each frame for steering.
- Use `ResourcePreloader` or `preload()` for assets loaded at startup; use `ResourceLoader.load_threaded_request()` for large assets loaded during gameplay.