Skip to content

Unity Folder Structure Conventions

Status: RESOLVED — July 19, 2026


Decisions

Assembly Definitions

Already defined in the project. Keep existing structure. No changes needed.

Addressables

Use Addressables for asset management (not Resources). Enables DLC delivery in the future.

Art Pipeline

  • 2D sprites: Aseprite with Pixellab integration for Unity import.
  • 3D terrain: Custom mesh generation (no models to import — grid is generated).
  • Source files (Aseprite .ase files) live outside Unity. Pixellab handles import.

Proposed Asset Structure

Assets/
├── _Project/                     # All game-specific content
│   ├── Scenes/
│   │   ├── Boot.unity
│   │   ├── MainMenu.unity
│   │   ├── Hub.unity
│   │   ├── Battle.unity
│   │   └── CoOpBattle.unity
│   │
│   ├── Scripts/
│   │   ├── Core/                 # Grid, CT timeline, battle state machine
│   │   ├── Units/                # Unit data, stats, status effects
│   │   ├── Aspects/              # Aspect definitions, slot system, synergy detection
│   │   ├── Grid/                 # Tile data, pathfinding (A*), LOS (Bresenham)
│   │   ├── Generation/           # Grammar engine (editor-time) + map export
│   │   ├── UI/                   # HUD, timeline bar, tooltips, menus
│   │   ├── Roguelike/            # Run state, node map, relic system, meta-progression
│   │   ├── Networking/           # INetworkTransport abstraction + Steamworks impl
│   │   ├── Save/                 # System.Text.Json serialization, save/load
│   │   └── Audio/                # Music, SFX management
│   │
│   ├── Prefabs/
│   │   ├── Units/
│   │   ├── UI/
│   │   ├── Grid/                 # Tile prefabs, cover, hazard objects
│   │   └── Effects/
│   │
│   ├── ScriptableObjects/
│   │   ├── Aspects/              # AspectDefinition assets
│   │   ├── Characters/           # CharacterDefinition assets
│   │   ├── Enemies/              # EnemyDefinition assets
│   │   ├── Equipment/            # EquipmentDefinition assets
│   │   ├── Relics/               # RelicDefinition assets
│   │   ├── Abilities/            # AbilityDefinition assets
│   │   ├── Encounters/           # Node/encounter definitions
│   │   ├── Synergies/            # Explicit synergy combination table
│   │   └── Maps/                 # Exported map assets (editor-grammar output)
│   │
│   ├── Art/
│   │   ├── Sprites/              # 2D character sprites (Aseprite → Pixellab)
│   │   ├── Materials/            # Materials for grid mesh + sprite shaders
│   │   └── Shaders/              # Height indicator, outline, billboard
│   │
│   ├── Audio/
│   │   ├── Music/
│   │   └── SFX/
│   │
│   ├── Input/
│   │   └── InputActions.inputactions  # KBM + future controller
│   │
│   └── AddressableAssetsData/    # Addressables groups + profiles

├── Plugins/                      # Steamworks.NET, Newtonsoft (if needed)
├── TextMesh Pro/                 # TMP essentials
└── MCP/                          # AI context (points to gdd/)

Naming Conventions

Asset TypeConventionExample
ScenesPascalCaseMainMenu.unity
ScriptsPascalCase, one class per fileCTTimeline.cs
ScriptableObjectsPascalCase + suffixAspect_Knight_Key.asset
PrefabsPascalCase + prefixUnit_Knight.prefab
Spritessnake_case + suffixtile_grass_01.png
MaterialsPascalCase + _Mat suffixTileGrass_Mat.mat
Audiosnake_case + categorysfx_spell_fireball.wav

Open Questions

  • [ ] Existing asmdef structure: audit and document what's already defined.
  • [ ] Pixellab integration: verify compatibility with Unity 6 (6000.x) + URP.
  • [ ] Map export pipeline: where do exported map assets live? ScriptableObjects/Maps/ or a dedicated folder?

Markdown is the canonical GDD source.