Grid Placement System
Introduction
UE 5.4+ CompatibleModular

Grid Placement System

A robust framework for creating building and placement mechanics in Unreal Engine projects.

Video Preview & Playable Demo Download

Watch the interactive gameplay demonstration

Download Playable Demo

Overview

The Grid Placement System provides a robust framework for creating building and placement mechanics in Unreal Engine projects.

GPS Preview

Key Features

Grid-based Placement

Snap objects to customizable grids with precision and intelligent alignment

Surface Detection

Advanced surface detection and validation with normal calculations

Input Management

Complete input handling system with customizable key bindings

UI Integration

Beautiful, ready-to-use widget system with modern design

Flexible Architecture

Modular design for easy customization and extensibility

Performance Optimized

Efficient algorithms and optimized rendering for smooth gameplay

Architecture

The system is built around several core components that work together seamlessly:

Core System

Core Components
Directional Arrow Component
Placeable Object Interface
  • PlacementHelper: Main Placement Orchestrator - coordinates all placement operations
  • PlacementObjectRegistry: Manages placeable objects with efficient lookup and caching
  • PlacementSystemComponent: Manages All Placement Logic with state management
  • DirectionalArrowComponent: For visualizing direction in Placeable Object Actors
  • PlaceableObjectInterface: Universal interface for all placeable objects

Internal Library Components

Library Components
  • GridSnapper: Handles precise grid snapping logic with customizable grid sizes
  • InputHandler: Comprehensive user input management with action mapping
  • ObjectManager: Advanced object lifecycle management and pooling
  • PlacementCameraController: Smooth camera control during placement operations
  • PlacementValidator: Robust validation system for placement rules and constraints
  • SoundManager: Audio feedback system with spatial audio support
  • SurfaceManager: Intelligent surface detection with multiple detection methods

Widgets

Modern UI elements designed for optimal user experience:

WBP_PlaceableObjectsListWidget
WBP_Control
  • WBP_PlaceableObjectsListWidget: Responsive container for placeable items with search and filtering
  • WBP_PlaceableItemWidget: Individual item component with preview and metadata
  • WBP_Control: Interactive overlay for tutorials, controls bindings

Plugin Tree (What is included?)

📁 Plugin Structure
📁GridPlacementSystem/
├── 📁Config
├── 📁Content
│ └── 📁GPS_Core
│ ├── 📁Audio
│ │ ├── 🎮SFX_GPS_Place.uasset
│ │ ├── 🎮SFX_GPS_Rotate.uasset
│ │ └── 🎮SFX_GPS_Snap.uasset
│ ├── 📁Core
│ │ ├── 📁Input
│ │ │ ├── 🎮IA_DeleteObject.uasset
│ │ │ ├── 🎮IA_PlacementCancel.uasset
│ │ │ ├── 🎮IA_PlacementConfirm.uasset
│ │ │ ├── 🎮IA_PlacementMove.uasset
│ │ │ ├── 🎮IA_PlacementRotate.uasset
│ │ │ ├── 🎮IA_PlacementShift.uasset
│ │ │ ├── 🎮IA_PlacementToggle.uasset
│ │ │ ├── 🎮IA_PlacementVertical.uasset
│ │ │ ├── 🎮IA_PlacementZoom.uasset
│ │ │ ├── 🎮IA_SelectObject.uasset
│ │ │ ├── 🎮IMC_PlacementMode.uasset
│ │ │ └── 🎮IMC_PlacementToggle.uasset
│ │ ├── 📁Material
│ │ │ ├── 🎮MF_GPS_ProcGrid.uasset
│ │ │ ├── 🎮MF_ProcGrid.uasset
│ │ │ ├── 🎮M_GPS_Grid.uasset
│ │ │ ├── 🎮M_GPS_Overlay.uasset
│ │ │ ├── 🎮M_GPS_SelectedOutline.uasset
│ │ │ ├── 🎮ProcGrid.uasset
│ │ │ ├── 🎮T_CircleChecker.uasset
│ │ │ ├── 🎮T_NormalGrid.uasset
│ │ │ └── 🎮T_PlusGrid.uasset
│ │ └── 📁Mesh
│ │ └── 🎮SM_GPS_Arrow.uasset
│ ├── 📁Demo
│ │ ├── 📁Character
│ │ │ └── 🎮UEM_CharacterSetup.uasset
│ │ └── 📁Maps
│ │ └── 🗺️GPS_DemoLevels.umap
│ ├── 📁Level
│ │ ├── 📁Material
│ │ │ ├── 🎮SomeMaterial.uasset
│ │ └── 📁Mesh
│ │ ├── 🎮Floor_400x400.uasset
│ │ ├── 🎮RoofMesh.uasset
│ │ ├── 🎮Roof_400x400.uasset
│ │ ├── 🎮Wall_400x200.uasset
│ │ └── 🎮Wall_Door_400x300.uasset
│ ├── 📁PlaceableActor
│ │ ├── 📁Floor
│ │ │ ├── 📁Cabinet
│ │ │ │ ├── 🎮A_BigCabinet.uasset
│ │ │ │ ├── 🎮A_ModernWoodenCabinet.uasset
│ │ │ │ ├── 🎮A_PaintedWoodenCabinet.uasset
│ │ │ │ ├── 📁Material
│ │ │ │ │ ├── 🎮SomeMaterial.uasset
│ │ │ │ └── 📁Mesh
│ │ │ │ ├── 🎮SM_Cabinet.uasset
│ │ │ │ ├── 🎮SM_ModernWoodenCabinet.uasset
│ │ │ │ ├── 🎮SM_PaintedWoodenCabinet.uasset
│ │ │ │ ├── 🎮SomeMesh.uasset
│ │ │ ├── 📁Chair
│ │ │ │ ├── 🎮A_ModernArmChair.uasset
│ │ │ │ ├── 🎮A_PlasticChair.uasset
│ │ │ │ ├── 📁Material
│ │ │ │ │ ├── 🎮SomeMaterial.uasset
│ │ │ │ └── 📁Mesh
│ │ │ │ ├── 🎮SM_ModernArmChair.uasset
│ │ │ │ └── 🎮SM_PlasticChair.uasset
│ │ │ └── 📁Table
│ │ │ ├── 🎮A_RoundWoodenTable.uasset
│ │ │ ├── 📁Material
│ │ │ │ ├── 🎮SomeMaterial.uasset
│ │ │ └── 📁Mesh
│ │ │ └── 🎮SM_RoundWoodenTable.uasset
│ │ ├── 📁Roof
│ │ │ ├── 📁CeilingFan
│ │ │ │ ├── 🎮A_CeilingFan.uasset
│ │ │ │ ├── 📁Material
│ │ │ │ │ ├── 🎮SomeMaterial.uasset
│ │ │ │ └── 📁Mesh
│ │ │ │ └── 🎮SM_CeilingFan.uasset
│ │ │ └── 📁Chandelier
│ │ │ ├── 🎮A_Chandelier.uasset
│ │ │ ├── 🎮A_Chandelier_1.uasset
│ │ │ ├── 📁Material
│ │ │ │ ├── 🎮SomeMaterial.uasset
│ │ │ └── 📁Mesh
│ │ │ ├── 🎮SM_Chandelier.uasset
│ │ │ └── 🎮SM_Chandelier_1.uasset
│ │ └── 📁Wall
│ │ ├── 📁Dartboard
│ │ │ ├── 🎮A_Dartboard.uasset
│ │ │ ├── 📁Material
│ │ │ │ ├── 🎮SomeMaterial.uasset
│ │ │ └── 📁Mesh
│ │ │ └── 🎮SM_Dartboard.uasset
│ │ ├── 📁Lamp
│ │ │ ├── 🎮A_WallLamp.uasset
│ │ │ ├── 📁Material
│ │ │ │ ├── 🎮SomeMaterial.uasset
│ │ │ └── 📁Mesh
│ │ │ └── 🎮SM_WallLamp.uasset
│ │ └── 📁Picture
│ │ ├── 🎮A_Picture.uasset
│ │ ├── 📁Material
│ │ │ ├── 🎮SomeMaterial.uasset
│ │ └── 📁Mesh
│ │ └── 🎮SM_Picture.uasset
│ └── 📁UI
│ ├── 📁Built-in
│ │ ├── 📁Material
│ │ │ ├── 🎮M_GPS_Border.uasset
│ │ │ ├── 🎮M_GPS_Border_Controls.uasset
│ │ │ └── 🎮M_GPS_Border_ItemList.uasset
│ │ └── 📁Widget
│ │ ├── 🎮WBP_Control.uasset
│ │ ├── 🎮WBP_PlaceableItemWidget.uasset
│ │ └── 🎮WBP_PlaceableObjectsListWidget.uasset
│ ├── 📁Icon
│ │ ├── 🎮SomeIcon.uasset
│ │ └── 🎮GPS_Default.uasset
│ └── 📁Simple
│ ├── 🎮WBP_MinimalMenu.uasset
│ └── 🎮WBP_MinimalObjectList.uasset
├── 🔌GridPlacementSystem.uplugin
├── 📁Resources
│ └── 🖼️Icon128.png
└── 📁Source
├── 📁GridPlacementSystem
│ ├── 💻GridPlacementSystem.Build.cs
│ ├── 📁Private
│ │ ├── 📁Core
│ │ │ ├── 📄DirectionalArrowComponent.cpp
│ │ │ ├── 📁Library
│ │ │ │ ├── 📄GridSnapper.cpp
│ │ │ │ ├── 📄InputHandler.cpp
│ │ │ │ ├── 📄ObjectManager.cpp
│ │ │ │ ├── 📄PlacementCameraController.cpp
│ │ │ │ ├── 📄PlacementValidator.cpp
│ │ │ │ ├── 📄SoundManager.cpp
│ │ │ │ └── 📄SurfaceManager.cpp
│ │ │ ├── 📄PlacementHelper.cpp
│ │ │ ├── 📄PlacementObjectRegistry.cpp
│ │ │ └── 📄PlacementSystemComponent.cpp
│ │ ├── 📄GridPlacementSystem.cpp
│ │ └── 📁Interface
│ │ └── 📄PlaceableObjectInterface.cpp
│ └── 📁Public
│ ├── 📁Components
│ │ └── 📄DirectionalArrowComponent.h
│ ├── 📁Core
│ │ ├── 📁Library
│ │ │ ├── 📄GridSnapper.h
│ │ │ ├── 📄InputHandler.h
│ │ │ ├── 📄ObjectManager.h
│ │ │ ├── 📄PlacementCameraController.h
│ │ │ ├── 📄PlacementValidator.h
│ │ │ ├── 📄SoundManager.h
│ │ │ └── 📄SurfaceManager.h
│ │ ├── 📄PlacementHelper.h
│ │ ├── 📄PlacementObjectRegistry.h
│ │ └── 📄PlacementSystemComponent.h
│ ├── 📄GridPlacementSystem.h
│ └── 📁Interface
│ └── 📄PlaceableObjectInterface.h
└── 📁GridPlacementSystemEditor
├── 💻GridPlacementSystemEditor.Build.cs
├── 📁Private
│ └── 📄GridPlacementSystemEditor.cpp
└── 📁Public
└── 📄GridPlacementSystemEditor.h
📁 Blueprints📄 Source Files🎮 Unreal Assets💻 Configuration