SpatialCore is a lightweight Unreal Engine plugin that provides a generic spatial abstraction layer for cursor-driven gameplay systems.
It decouples where the cursor is in the world from how that position is interpreted, allowing projects and plugins to optionally resolve cursor positions into logical 2D “cells” (grids, tiles, etc.) without hard dependencies.
Many gameplay systems need to answer:
“What logical space is the cursor currently over?”
Examples:
- RTS selection & placement
- City-builder hover logic
- Tactical overlays
- UI context actions
Traditionally, this logic gets:
- Re-implemented per project, or
- Hard-wired into a grid or RTS system
SpatialCore solves this once, in a project-agnostic way.
Any system that can provide a cursor world position
(e.g. PlayerController, camera pawn, input system).
An optional system that can convert a world position into a logical 2D cell.
- Grid systems
- Tile maps
- Custom spatial layouts
Implemented via an interface:
ISpatialCellProvider2D
A client-side World Subsystem that:
- Receives cursor world locations
- Optionally resolves them via a spatial provider
- Emits
OnCellChangedwhen the resolved cell changes
- Tracks cursor world position (client-side)
- Optionally resolves that position into a logical cell
- Broadcasts cell changes via delegates
- Provides a stable API usable across multiple projects
- Works in C++ and Blueprints
- Does not implement a grid
- Does not assume RTS gameplay
- Does not require a spatial provider to function
- Does not perform server-side gameplay logic
SpatialCore is intentionally minimal.
- PlayerController updates cursor world position
UCursorSpatialCellSubsystemreceives the update- If a spatial provider is set:
- World position → logical cell
- If the cell changes:
OnCellChangedis broadcast
- Gameplay / UI systems react
All steps are optional.
SpatialCore does not depend on any grid plugin.
Grid systems (e.g. WorldGrid) may:
- Implement
ISpatialCellProvider2D - Register themselves with the subsystem at runtime
This keeps both plugins reusable and independent.
- Designed for client-only spatial intent
- Safe for multiplayer projects
- Server logic should consume results explicitly if needed
- RTS & city-builder cursor interaction
- Placement previews
- Selection highlighting
- UI hover logic
- Shared spatial behavior across multiple games
- No hard dependencies
- No gameplay assumptions
- Minimal surface area
- Long-term reuse across projects