Migrate into your project
Use this when you want city-builder systems inside a project you already have, instead of extending the standalone FAB template.
Migration overview
Section titled “Migration overview”flowchart LR FAB["FAB template project"] --> Migrate["Asset Actions → Migrate"] Migrate --> Target["Your project Content/"] Target --> Collision["Add GenericBuilding + GenericRoad channels"] Collision --> Maps["Set GameInstance + maps"] Maps --> Play["Play migrated DemoMap"]
Example — minimal migrate into MyGame
Section titled “Example — minimal migrate into MyGame”Assume your project lives at C:/Projects/MyGame/.
- Open the City Builder Template FAB project.
- In Content Browser, select the folder CityBuilderTemplate.
- Right-click → Asset Actions → Migrate → choose
C:/Projects/MyGame/Content/. - Confirm the dependency list (includes meshes, materials, widgets, and Misc/ST_CityBuilderTemplate).
Minimum folder:
Content/CityBuilderTemplate/├── Blueprints/ (all subfolders)├── Maps/ (DemoMap, MainMenu — optional but recommended)├── Meshes/├── Materials/├── Textures/├── Misc/└── 1_BP_CBT_Tut_* … (optional in-editor tutorials)Project settings
Section titled “Project settings”Merge into your project’s Config/DefaultEngine.ini:
Maps and game instance
Section titled “Maps and game instance”[/Script/EngineSettings.GameMapsSettings]GlobalDefaultGameMode=/Game/CityBuilderTemplate/Blueprints/BP_CBT_GameMode.BP_CBT_GameMode_CGameInstanceClass=/Game/CityBuilderTemplate/Blueprints/BP_CBT_GameInstance.BP_CBT_GameInstance_CPoint EditorStartupMap / GameDefaultMap at migrated maps or your own menu that calls BP_CBT_GameInstance.
Collision channels
Section titled “Collision channels”[/Script/Engine.CollisionProfile]+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,Name="GenericBuilding",DefaultResponse=ECR_Overlap,bTraceType=False,bStaticObject=False)+DefaultChannelResponses=(Channel=ECC_GameTraceChannel2,Name="GenericRoad",DefaultResponse=ECR_Overlap,bTraceType=False,bStaticObject=False)+Profiles=(Name="GenericBuilding",CollisionEnabled=QueryAndPhysics,ObjectTypeName="GenericBuilding",CustomResponses=,HelpMessage="Collision Preset for all generic building types.",bCanModify=True)+Profiles=(Name="GenericRoad",CollisionEnabled=QueryAndPhysics,ObjectTypeName="GenericRoad",CustomResponses=,HelpMessage="Collision Preset for all generic road types.",bCanModify=True)Or create GenericBuilding and GenericRoad object channels in Project Settings → Collision.
Without these channels, Internal_CheckNearRoad and placement traces fail silently.
Plugins
Section titled “Plugins”The template .uproject enables:
| Plugin | Required for |
|---|---|
| GuidedTutorials | In-editor *_Tut_* tutorial assets |
| ModelContextProtocol | Optional — editor MCP tooling |
Enable GuidedTutorials in your target project if you migrated tutorial assets.
Copy relevant action/axis mappings from the template Config/DefaultInput.ini or merge into your Enhanced Input setup:
- PrimaryClick, SecondaryClick, Delete
- MoveForward, MoveRight, CameraRotate
- CameraZoomIn, CameraZoomOut
- BuildingRotateLeft, BuildingRotateRight
- PauseGame
BP_CBT_PlayerPawn expects these legacy action names unless you rebind in the controller.
First playable test map
Section titled “First playable test map”- Migrate content (above).
- Open migrated CityBuilderTemplate/Maps/DemoMap (or duplicate to
Content/MyGame/Maps/CityTest). - World Settings:
- Game Mode Override → BP_CBT_GameMode
- Ensure the level contains:
- BP_CBT_Grid
- BP_CBT_Singleton
- BP_CBT_TimeOfDay
- BP_CBT_PlayerController / BP_CBT_PlayerPawn spawn (game mode default pawn)
- Press Play — place a road and BP_CBT_House.
Integrate with your game (optional)
Section titled “Integrate with your game (optional)”| Approach | Steps |
|---|---|
| Sub-level | Keep city in DemoMap; open as sub-level from your hub map via BP_CBT_GameInstance → OpenLevel |
| Mode switch | Set your menu Game Instance to BP_CBT_GameInstance only on city levels |
| Systems only | Migrate Blueprints/ without maps; place Grid, Singleton, and TimeOfDay in your own level |
Save slot
Section titled “Save slot”Default slot name CityBuilderSaveGame is defined in BP_CBT_ObjectMacros / GetSaveGameSlotNameAndIndex.
Rename only if you change it in one place and update WBP_MainMenu + WBP_PlayerHUD save buttons.
Troubleshooting
Section titled “Troubleshooting”| Issue | Fix |
|---|---|
| Buildings won’t place | Check GenericRoad overlaps and bIsNearRoad |
| HUD missing | BP_CBT_PlayerController must create WBP_PlayerHUD |
| Save fails | Confirm BP_CBT_SaveGame class on game instance |
| Wrong map on launch | Update GameMapsSettings in DefaultEngine.ini |
| Grid misaligned | Match BP_CBT_PlayerController → Grid Size and BP_CBT_Grid → Default Grid Size to level scale |