Folder Structure

Content Folder Structure (UE5 Best Practice)

This defines the canonical layout for Content/ and the asset naming conventions. Following it from day one prevents the disorganized asset sprawl that plagues survival projects with thousands of assets.

Status: reviewOwner: UnassignedUpdated: 2026-08-27

Production context

Canonical sourceGDD/05-Technical/03-Content-Folder-Structure.md
Decision markers0 confirmed · 0 recommendations · 0 TBD
Browser document roleRead-only production view; edit the GDD source or this generated system through the project workflow.

Verified implementation evidence

  • Not verified for this documentation pass.

Relationships

Document contract coverage

Use these required Folder Structure areas during review. The imported GDD below is canonical; items not stated explicitly remain unresolved.

  • ReviewRepository Layout
  • ReviewSource Assets / DCC
  • ReviewExports / Interchange
  • ReviewUE5 Content Layout
  • ReviewOwnership Boundaries
  • ReviewPlacement Rules
  • ReviewMigration Rules
  • ReviewExamples

Canonical GDD content

This defines the canonical layout for Content/ and the asset naming conventions. Following it from day one prevents the disorganized asset sprawl that plagues survival projects with thousands of assets.

Core principles

  1. Single project root folder. Everything project-specific lives under Content/Lambeer/. This isolates our content from plugin/marketplace/engine content and makes migration and search trivial.
  2. Organize by feature/module, not by asset type at the top level. Group assets by what they belong to (a weapon, a zombie), then by type within. This keeps related assets together.
  3. Consistent prefixes. Every asset uses a type prefix so type is obvious in the content browser and in references.
  4. No assets in the Content/ root. Nothing loose at the top level.
  5. Mirror the code structure where it makes sense (a Combat code module ↔ Weapons content area).

Marketplace/Fab and template content stays in its own folders (or under a Content/ThirdParty/), never mixed into Content/Lambeer/.

Top-level layout

Content/
  Lambeer/                         # ALL project content lives here
    Core/                          # global/shared gameplay assets
      GameModes/                   # BP_GameMode, BP_GameState (BP children of C++)
      Player/                      # BP_PlayerController, BP_PlayerState, BP_GameInstance
      Input/                       # Enhanced Input: IMC_*, IA_*
      Data/                        # global DataTables/curves/settings (DT_*, DA_*, CRV_*)
      UI/                          # shared/global widgets, fonts, common textures
    Characters/
      Player/
        MetaHumans/                # imported MetaHuman assets (per MetaHuman pipeline)
        Animation/                 # ABP_*, AM_*, BS_* for the player
        Blueprints/                # BP_PlayerCharacter (child of ALambeerCharacter)
        Materials/                 # player-specific M_/MI_
      Zombies/
        Shared/                    # shared zombie anims, materials, base BP
        Walker/                    # SK_, ABP_, BP_Zombie_Walker, materials
        Runner/
        Tank/
        Spitter/
        Bosses/
          Boss_T1_<Name>/          # mesh, anim, BP, VFX, data per boss
        AI/                        # ST_* (StateTree), EQS_*, BP_ZombieAIController
    Weapons/
      Firearms/
        <WeaponName>/              # SK_, anims, BP_Weapon_<Name>, DA_Weapon_<Name>
      Melee/
        <WeaponName>/
      Attachments/                 # optics, mags, muzzles
      Shared/                      # shared weapon VFX, ammo meshes, decals
    Items/
      Resources/                   # wood, stone, metal, scrap (SM_, T_, DA_Item_*)
      Consumables/                 # food, water, medical
      BuildingItems/               # placeable-piece items (the deployers)
      Data/                        # DA_Item_*, DT_LootTables, DT_Recipes
    Building/
      Pieces/                      # foundation, wall, floor, ceiling (SM_ + BP_Build_*)
      Deployables/                 # door, storage, crafting stations, traps
      Materials/                   # tier materials (twig/wood/stone/metal/armored)
    Crafting/
      Stations/                    # workbench, campfire, fabricator (BP_ + DA_)
      Data/                        # DT_Recipes, DA_Blueprint_* (recipe unlocks)
    World/
      Maps/
        L_MainWorld/               # World Partition persistent level (+ external actors)
        L_MainMenu/
        L_Dev_Sandbox/             # greybox/test maps
      Environment/
        Meshes/                    # SM_ environment props/architecture (Nanite)
        Materials/                 # M_/MI_ environment
        Foliage/
        Decals/
      Lighting/                    # sky/time-of-day; rain weather (wetness: Gameplay/11-Wetness-and-Rain)
      POIs/                        # reusable POI building blocks / level instances
    Vehicles/
      <VehicleName>/               # SK_, BP_Vehicle_<Name>, DA_Vehicle_<Name>, materials
    AI/                            # shared AI assets not tied to one enemy (if any)
    VFX/
      Niagara/                     # NS_*, NE_*
      Materials/                   # M_FX_*
    Audio/
      SFX/                         # SW_* (sound waves), SC_* (cues / metasounds)
      Music/
      Attenuation/                 # ATT_*
      Mixes/                       # SCLASS_/SMIX_
    UI/
      HUD/                         # WBP_HUD, WBP_StatusBars, WBP_Compass
      Menus/                       # WBP_MainMenu, WBP_Settings, WBP_ServerBrowser
      Inventory/                   # WBP_Inventory, WBP_Crafting, WBP_Container
      Building/                    # WBP_BuildMenu
      Common/                      # reusable widgets, styles, fonts, icons (T_UI_*)
    Cinematics/                    # (optional) intro/level sequences
  Developers/                      # engine default: personal sandbox/test (keep)
  ThirdParty/                      # marketplace/Fab content kept isolated (optional)

Asset naming conventions

Pattern: Prefix_AssetName_Variant (PascalCase, no spaces).

Asset type Prefix Example
Blueprint class BP_ BP_PlayerCharacter
Blueprint (data-only/struct) BP_ / BPS_ BPS_ItemState
Widget Blueprint WBP_ WBP_Inventory
Animation Blueprint ABP_ ABP_Player
Anim Montage AM_ AM_Reload_Rifle
Anim Sequence AS_ AS_Idle
Blend Space BS_ BS_Locomotion
Skeletal Mesh SK_ SK_Zombie_Walker
Skeleton SKEL_ SKEL_Zombie
Static Mesh SM_ SM_Wall_Wood
Material M_ M_Building_Metal
Material Instance MI_ MI_Building_Metal_Damaged
Material Function MF_ MF_Detail
Texture T_ T_Wall_Wood_BC
Niagara System / Emitter NS_ / NE_ NS_MuzzleFlash
Data Asset DA_ DA_Weapon_AK
Data Table DT_ DT_LootTables
Curve CRV_ CRV_DamageFalloff
Sound Wave / Cue / MetaSound SW_ / SC_ / MS_ SC_Gunshot_Rifle
Attenuation ATT_ ATT_Gunfire
Input Mapping Context IMC_ IMC_Default
Input Action IA_ IA_Fire
StateTree ST_ ST_Zombie_Walker
Level / Map L_ L_MainWorld
Level Sequence LS_ LS_Intro
Texture suffixes _BC/_N/_ORM/_M etc. T_Barrel_N (normal)

Conventions & rules

  • Folders: PascalCase, no spaces. Group by feature, then type.
  • No loose assets in Content/ or feature roots — always in a typed subfolder.
  • One-way references: lower-level/shared content (Core, Shared) must not depend on higher-level feature content. Avoid cross-feature reference cycles.
  • Migrate template assets out of the way (the existing ThirdPerson, Variant_*, LevelPrototyping folders are template content — remove Variant_*; reuse/relocate Input/Characters only if useful, otherwise replace under Lambeer/). See 05-Project-Setup-Steps.md.
  • Collections (the existing Collections folder) may be kept for editor organization but are not authoritative structure.

This structure is the standard to enforce in code review and asset review.