Vav Labs
Back home

Blog / Vav Labs

RSS

Technical notes from Vav Labs.

Unity, Godot, rendering, product engineering, and the maintenance work behind long-lived software.

Working in Unity and need faster bug investigations? Buy BugLens and capture Play Mode evidence with one key.

Cluster / Godot pathfinding

Godot pathfinding, from empty path to production

Grids, navmeshes, clearance, dynamic blockers, and the named reasons a path comes back empty — with runnable Godot 4.6 scenes where it matters.

Cluster / Unity debugging

Unity debugging with evidence instead of folklore

MonoBehaviour basics, the editor errors that eat evenings, and how to capture the state of a bug while it still exists.

01 / article

Godot pathfinding

Weighted Terrain Pathfinding in Godot

Make AStarGrid2D prefer roads over mud and swamp with verified terrain weights, correct route-cost math, safe heuristics, and per-unit profiles.

2026-07-14 / 16 min read

Read

02 / article

Godot pathfinding

Runtime AStarGrid2D Updates Without Full Rebuilds

Update doors, blockers, and terrain costs in AStarGrid2D without rebuilding the grid. Learn when update() is required and how to replay point data.

2026-07-13 / 13 min read

Read

03 / article

Godot pathfinding

Fire Emblem, Into the Breach and XCOM Movement in Godot

Fire Emblem terrain profiles, Into the Breach's telegraphed intents, and XCOM 2's action bands — three movement contracts mapped to verified Godot systems.

2026-07-13 / 10 min read

Read

04 / article

Godot pathfinding

Turn order and movement planning in Godot

Build deterministic tactical turns in Godot with explicit phases, movement intents, initiative tie-breakers, conflict resolution, and safe state commits.

2026-07-13 / 13 min read

Read

05 / article

Godot pathfinding

Action points and terrain costs in Godot

Build Godot tactical movement where terrain entry costs consume action points, previews stay pure, confirms validate first, and undo restores state.

2026-07-12 / 14 min read

Read

06 / article

Godot pathfinding

Rectangular and Circular Agent Clearance in Godot

Handle rectangular and circular agents on Godot grids with footprint masks, summed-area tables, radius fields, and explicit rotation rules.

2026-07-12 / 14 min read

Read

07 / article

Godot pathfinding

Annotated A* for Multi-Size Agents in Godot

Use one clearance map inside A* to pathfind for 1x1, 2x2, and larger square agents in Godot without rebuilding the grid for every size.

2026-07-12 / 15 min read

Read

08 / article

Godot pathfinding

How to Move Multi-Tile Units on a Grid in Godot

Move 2x2 and larger units on a Godot grid: anchor conventions, the map_to_local half-cell trap, touched-cell checks, rotation, and ownership.

2026-07-12 / 12 min read

Read

09 / article

Godot pathfinding

How to Prevent Two Units From Moving to the Same Tile in Godot

Prevent two Godot units from claiming one tile with a small reservation table: pure previews, atomic confirms, deterministic conflicts, and reversible undo.

2026-07-11 / 15 min read

Read

10 / article

Godot pathfinding

Godot No-Path Reports: Turn an Empty Path Into a Diagnosis

Turn an empty Godot path into a useful no-path report: system, query, reason code, evidence, next check, and copyable output.

2026-07-09 / 11 min read

Read

11 / article

Godot pathfinding

Building a navigation debug panel in Godot

Build a runtime navigation debug panel in Godot 4: built-in debug toggles, NavigationServer2D stats, and a click-to-probe tester that explains failed paths.

2026-07-08 / 10 min read

Read

12 / article

Godot pathfinding

Dijkstra maps for roguelike AI in Godot

Build Dijkstra maps in Godot for roguelike AI: pursuit fields, shared maps for many actors, source bias, flee maps, autoexplore, hazards, and INF-safe scoring.

2026-07-08 / 13 min read

Read

13 / article

Godot pathfinding

Tactical RPG movement range in Godot

Build tactical RPG movement range in Godot with TileMapLayer, AStarGrid2D, terrain costs, unit blockers, reachable-cell highlights, and path preview.

2026-07-07 / 12 min read

Read

14 / article

Godot pathfinding

Godot pathfinding addons compared: what actually exists in 2026

Godot 4 pathfinding addons compared against the built-ins: Asset Library and GitHub options, maintenance state, licenses, and the gaps left.

2026-07-07 / 12 min read

Read

15 / article

Godot pathfinding

Why your NavigationAgent gets stuck in Godot: a diagnosis guide

Diagnose a stuck NavigationAgent2D in Godot: bake-radius mismatch, repath loops, avoidance push-off, unreachable targets, and callback traps.

2026-07-06 / 12 min read

Read

16 / article

Godot pathfinding

AStar2D in Godot 4: complete reference

AStar2D reference for Godot 4: points, connections, one-way segments, weights, disabled points, closest-point lookup, partial paths, and custom costs.

2026-07-05 / 13 min read

Read

17 / article

Godot pathfinding

NavigationAgent2D Setup and Common Gotchas in Godot

Fix NavigationAgent2D not moving, first-frame empty paths, early finished states, jitter, and avoidance wiring in Godot 4.7, with runnable proof.

2026-07-02 / 10 min read

Read

18 / article

Godot pathfinding

NavigationObstacle Avoidance vs Pathfinding in Godot

NavigationObstacle avoidance steers Godot agents locally. It does not make path queries reroute by itself. Use an explicit route query to prove what changed.

2026-07-01 / 9 min read

Read

19 / article

Godot pathfinding

TileMapLayer Custom Data for Walkability in Godot

Use a Godot TileSet custom data layer as the AStarGrid2D walkability source: read TileData, handle empty cells, and avoid navigation-layer confusion.

2026-06-29 / 8 min read

Read

20 / article

Godot pathfinding

TileMap to Navigation Grid in Godot

Build an AStarGrid2D from a Godot TileMapLayer using get_used_rect(), tile custom data, and set_point_solid(). Verified in Godot 4.7.

2026-06-27 / 12 min read

Read

21 / article

Godot pathfinding

Stop Players from Blocking the Path in a Godot Tower Defense

Validate tower placement in Godot before the player seals the maze. A temporary blocker check, a real demo, and measured full-vs-incremental cost.

2026-06-24 / 9 min read

Read

22 / article

Godot pathfinding

NavigationServer2D in Godot 4: the complete guide

Complete NavigationServer2D guide for Godot 4: NavigationRegion2D baking, map sync, direct map_get_path() queries, links, obstacles, and empty-path fixes.

2026-06-23 / 13 min read

Read

23 / article

Godot pathfinding

AStarGrid2D in Godot 4: complete reference

Complete AStarGrid2D reference for Godot 4: region, cell size, update(), solid cells, weight scale, diagonals, heuristics, jumping, and partial paths.

2026-06-21 / 15 min read

Read

24 / article

Godot pathfinding

Moving 10,000 agents in Godot without the frame spike

Godot pathfinding slow with many agents? A Godot 4.6 benchmark: one shared field holds 10,000 at a 5 ms median frame where per-agent queries collapse at 500.

2026-06-15 / 12 min read

Read

25 / article

Godot pathfinding

Why is my path failing in Godot? Nine boring causes to check first

Godot returned an empty path? Check coordinates, bounds, solid starts, stale grid data, sync timing, clearance, region gaps, and weights first.

2026-06-10 / 10 min read

Read

26 / article

Godot pathfinding

Pathfinding failure modes in Godot: why no path is not enough

When Godot returns an empty path, ask which assumption failed: start, goal, blocker, clearance, terrain rule, stale data, or disconnected region.

2026-06-08 / 8 min read

Read

27 / article

Godot pathfinding

Grid or navmesh in Godot? Choosing pathfinding that survives production

The short answer first, then the full decision: movement model, runtime changes, scale, agent size, path stability. Current for Godot 4.6, FAQ included.

2026-06-06 / 9 min read

Read

28 / article

Godot pathfinding

Dynamic blockers in Godot: when one tower should not rebuild the whole map

A placed tower or closed door should invalidate a region, not rebuild the whole grid. Update Godot pathfinding locally, without the full-rebuild frame spike.

2026-06-05 / 10 min read

Read

29 / article

Meta Quest VR

Quest VRC: 60 fps or 72 fps? The official docs still conflict

Meta's official Quest guidance still says both 60 and 72 fps. Here is why 72 is the conservative pre-submit target, and what to verify.

2026-06-04 / 8 min read

Read

30 / article

Godot pathfinding

Flow fields in Godot: pathfinding for crowds that share a destination

When a crowd shares one destination, per-agent A* repeats the same work. A flow field solves the grid once so every agent can read the next direction.

2026-06-04 / 9 min read

Read

31 / article

Unity fundamentals

What is a MonoBehaviour in Unity?

A MonoBehaviour is the base class that lets Unity attach a C# script to a GameObject and call it each frame. What it is, its lifecycle, and when to skip it.

2026-06-04 / 7 min read

Read

32 / article

Unity troubleshooting

“No MonoBehaviour scripts in the file”: what Unity means and how to fix it

Unity's “no MonoBehaviour scripts in the file” error: check for compile errors first, then the file/class name match, then whether it's really a MonoBehaviour.

2026-06-04 / 7 min read

Read

33 / article

Unity tooling

What belongs in an AI bug-fix prompt — and what is just 48 KB of noise

Pasting a whole scene dump into an AI assistant and asking it to fix the bug is not a prompt; it is a hope. A useful AI bug report is small and structured.

2026-05-29 / 8 min read

Read

34 / article

Godot pathfinding

Influence maps in Godot: giving a grid a sense of danger

A* finds the shortest path — even when it runs straight through the enemy's firing line. Influence maps turn a grid from a floor plan into a tactical opinion.

2026-05-29 / 9 min read

Read

35 / article

Unity tooling

Unity bug reports need evidence, not folklore

Most Unity bug reports arrive as folklore: vague memory, no scene, no logs, no screenshot. Capture the evidence on screen, before the trail goes cold.

2026-05-27 / 8 min read

Read

36 / article

Godot pathfinding

Multi-size agents in Godot: clearance maps without the headaches

Godot grid pathfinding treats every unit as one cell, so a 2×2 agent routes through gaps it can't fit. Clearance maps fix it with one grid for all sizes.

2026-05-25 / 8 min read

Read

37 / article

Godot / Performance

Why your Godot pathfinding causes frame spikes and how to fix it

Stop repathing when nothing changed, spread queries across frames, share one map between agents, stop allocating on the hot path. Four fixes, with tradeoffs.

2026-05-25 / 9 min read

Read

38 / article

Engineering practice

Open-sourcing an old Unity game is not a button

Re-shipping a 2018 Unity game raised the obvious question: open source it. The real answer lives in asset licensing, archaeology, and maintenance promises.

2026-05-25 / 8 min read

Read

39 / article

Research

Why running TDA in real time is an unreasonable thing to try

Topological data analysis has strong offline algorithms. A 16ms frame budget is where they stop being convenient and become an engineering problem.

2026-05-16 / 7 min read

Read

40 / article

Godot pathfinding

AStarGrid2D limitations and alternatives in Godot

AStarGrid2D limitations in Godot: when the built-in grid stops being enough, which alternatives fit, and what dynamic blockers, clearance, and crowds cost.

2026-05-15 / 10 min read

Read

41 / article

Product engineering

How to build a Unity Asset Store tool without exposing source

Private source is fine. Private evidence is where it gets awkward. How to package and sell a closed-source Unity Asset Store tool buyers can still trust.

2026-05-14 / 8 min read

Read

42 / article

Rendering

URP performance mistakes I look for first

The first URP rendering checks before we blame the engine, the GPU, or the phase of the moon — overdraw, extra passes, and settings that quietly cost frames.

2026-05-13 / 9 min read

Read

43 / article

Unity architecture

How I structure Unity projects that outgrow MonoBehaviour scripts

A boundary-first approach for Unity projects after the inspector stops being a filing system — separating data, logic, and scene wiring so code keeps scaling.

2026-05-12 / 9 min read

Read