We just shipped the Modular Kit Snapping Tool — a focused snap-point system for modular kits in Unreal Engine 5.7. It's our smallest, most opinionated plugin to date, and it solves one problem really well: making modular pieces lock together face-to-face without the manual fiddling.
If you've ever spent an afternoon nudging modular wall pieces into alignment with the grid snap toggle on, this is for you.
The boring problem we kept hitting
Hand-placing modular kits is slow. Grid snapping helps a little, but it has a fundamental limit: the grid doesn't know what a piece is. It doesn't know that this wall has a doorway, that that floor needs a corner piece on its left edge, or which way the connection face is pointing.
So you end up with a workflow that looks like:
- Drop a piece in roughly the right spot.
- Hit the grid snap key.
- Nudge it manually because the grid put it in the wrong half-cell.
- Rotate it because the doorway is facing the wrong way.
- Discover at playtest that the doorway opens to nothing.
Every studio we've talked to has some custom Blueprint or Editor Utility script that papers over this. Some of them work. None of them are documented or shipped.
We wanted a real connection model.
What snap points actually model
A USnapPointComponent is a USceneComponent you drop on a ModularPieceActor. It carries five properties that matter:
- Type — Wall, Floor, Ceiling, Corner, Door, Window, Connector, Custom
- Rule —
MustConnect,Optional, orBlocked - Direction — which world axis the connection face points along (±X / ±Y / ±Z)
- Radius — how close another snap point has to be to count as a candidate match
- Compatibility list — per-component override of the default same-type-only matching
That's the whole vocabulary. No grid coordinates, no socket name conventions, no transform math hidden inside an Editor Utility. Just five properties per snap point.
The trick is direction. Two snap points only match when their outward directions are roughly anti-parallel — which means a Wall snap facing +Y will connect to a Wall snap facing -Y, but never to a Wall snap facing +Y. That's the difference between "two pieces touching" and "two pieces actually connected."
AutoSnapAll: the one Blueprint call
Once your pieces have snap points, the rest is one function:
// Snap every ModularPieceActor in the level. Anchors stay put;
// everything else snaps around them.
SnapManager->AutoSnapAllInWorld(this);
AutoSnapAll walks every piece, tests every snap point against every already-registered snap point, and picks the best match per piece. The source piece is moved into alignment so the two snap points meet face-to-face, and the connection is recorded.
It works at edit time too — drop a SnapConnectionManager into an Editor Utility Widget and you can clean up an entire level with one button click.
Anchors are how you tell the system what shouldn't move. Tick bIsAnchor on a foundation tile or a spawn-room piece and it stays put while everything else aligns to it. Multiple anchors are fine.
Rule sets: designer guard rails
A UModularKitRuleSet data asset defines:
SnapDistance— max distance for a candidate matchAngleTolerance— how far from "directly opposite" two directions can beCompatibilityRules— which types can connect across (Wall ↔ Door, Wall ↔ Window, etc.)bEnforceMandatoryConnections— whether validation flags unconnectedMustConnectpoints
The compatibility matrix is the part designers care about. Without it, snap points only connect same-type-to-same-type — a Wall connects only to a Wall. With it, you can say "Walls can connect to Doors, but not to Windows" and ship that as a single asset across your team.
We include 5 ready-made presets: Medieval Castle, Modern Office, Sci-Fi Corridor, Fantasy Dungeon, Residential House. They're starting points, not final kits — copy the values into a saved data asset and tune.
Validation: catch the broken structure before ship
Mark a snap point as MustConnect and ValidateStructure will flag it if it ends up unconnected. This is the single highest-value feature in the plugin and the one we use the most internally.
The classic case: a doorway with no door piece on the other side. With grid snap, this ships. With MustConnect, the validator broadcasts OnValidationResult(false) and your editor widget lights up red.
You can also wire OnConnectionMade and OnConnectionBroken to gameplay logic — perfect for survival/building games where you want a snap SFX to fire when the player drops a piece in place.
What this is, what this isn't
We try to be honest about scope. Here's what the plugin does and doesn't do:
Does:
- Typed snap points with face-to-face alignment
- AutoSnapAll for whole-kit assembly
- Rule-based compatibility and validation
- Editor viewport visualizer (colored dots, direction arrows, snap-radius diamonds, live connection lines)
- Custom Details Panel with snap counts and one-click Add Snap Point
- Blueprint events for runtime integration
Does not:
- Procedural building generation (no automatic dungeon layout)
- Multiplayer replication on the connection manager (you can wire this yourself)
- Ghost/preview placement helpers for runtime player-placement
- Bundled mesh content (rule presets ship; kit meshes don't — pair this with any modular kit you already use)
If you need procedural generation, pair this with the Procedural Placement Tool — one scatters, the other connects.
Pricing
- Personal: $14.99 (individuals, teams under $100k revenue/funding in the last 12 months)
- Professional: $44.99 (studios over $100k)
It's also part of the Complete Arsenal bundle — all 12 StraySpark products at the deepest discount we offer.
Get started
- Product page
- Documentation
- Getting Started guide — assemble your first kit in five minutes
If you've been writing custom snap scripts, this replaces them. If you've been using grid snap and praying, this is what you actually wanted.
As always — reply to this on email or hit us on the contact page. We read everything.