--- title: Unity 6 LTS Project Scaffold for Neighborhood Quarterback type: feat date: 2026-01-31 --- # Unity 6 LTS Project Scaffold for Neighborhood Quarterback ## Overview Create the foundational Unity project structure for "Neighborhood Quarterback" - a 1v1 real-time capture-the-flag game. This scaffold establishes the correct Unity 6 LTS configuration, URP 2D rendering, New Input System, and cross-platform build targets (Android, iOS, Desktop). **Brainstorm reference:** `docs/brainstorms/2026-01-31-unity-project-setup-brainstorm.md` ## Problem Statement We need a properly configured Unity project foundation before any gameplay development can begin. Incorrect initial setup leads to painful refactoring later - especially render pipeline choices, input system selection, and mobile build configurations. ## Proposed Solution Create a Unity 6 LTS project with: - URP 2D Renderer for the "backyard baseball meets satellite-map clarity" aesthetic - New Input System for unified touch/mouse handling - Feature-based folder organization matching the game's system architecture - Pre-configured build targets for all platforms ## Technical Approach ### Prerequisites - Unity Hub installed - Unity 6 LTS (6000.0.x or 6000.3.x) installed via Hub - Android Build Support module (Android SDK, NDK, OpenJDK) - iOS Build Support module (requires macOS + Xcode) ### Phase 1: Project Creation (Unity Hub) **Task 1.1: Create new Unity project** 1. Open Unity Hub → Projects → New Project 2. Select "2D (URP)" template under Unity 6 LTS 3. Set project name: `neighborhood-quarterback` 4. Set location: `/Users/johnlamb/projects/backyard-ctf/` 5. Click Create **Verification:** Project opens in Unity Editor with URP 2D configured. ### Phase 2: Package Configuration **Task 2.1: Verify/Install required packages** Open Window → Package Manager and ensure these are installed: | Package | Purpose | |---------|---------| | Universal RP | Already included with 2D URP template | | Input System | Cross-platform input (install if not present) | | 2D Sprite | Sprite rendering (should be included) | | 2D Tilemap | Optional - for map building later | **Task 2.2: Configure Input System** 1. Edit → Project Settings → Player → Other Settings 2. Set "Active Input Handling" to **Input System Package (New)** 3. Restart Unity when prompted **Verification:** `Packages/manifest.json` contains `"com.unity.inputsystem"`. ### Phase 3: Folder Structure Setup **Task 3.1: Create feature-based folder structure** In the Project window, create this hierarchy under `Assets/`: ``` Assets/ ├── Features/ │ └── _Template/ │ └── README.txt # "Copy this folder for new features" ├── Shared/ │ ├── Fonts/ │ └── UI/ ├── Settings/ │ ├── URP/ # Move URP assets here │ └── Input/ # Input action assets go here └── Scenes/ └── Main.unity # Rename SampleScene or create new ``` **Task 3.2: Organize URP settings** 1. Locate the URP assets created by template (usually in `Assets/Settings/` or root) 2. Move `URP-2D-Renderer.asset` and `URP-2D.asset` to `Assets/Settings/URP/` 3. Update references in Edit → Project Settings → Graphics if needed **Task 3.3: Create placeholder Input Actions** 1. Right-click `Assets/Settings/Input/` → Create → Input Actions 2. Name it `GameInputActions` 3. Open and create initial action map "Gameplay" with placeholder actions: - `Select` (Button) - for unit selection - `Point` (Value, Vector2) - for cursor/touch position - `Drag` (Button) - for route drawing **Verification:** Folder structure matches spec, no broken asset references. ### Phase 4: Build Target Configuration **Task 4.1: Add Android platform** 1. File → Build Settings 2. Select Android → Switch Platform 3. Player Settings → Other Settings: - Scripting Backend: **IL2CPP** - Target Architectures: **ARM64** only - Minimum API Level: **Android 7.0 (API 24)** - Target API Level: **Automatic (highest)** **Task 4.2: Add iOS platform** 1. File → Build Settings 2. Select iOS → Switch Platform 3. Player Settings → Other Settings: - Scripting Backend: **IL2CPP** (required for iOS) - Target SDK: **Device SDK** - Target minimum iOS Version: **13.0** - Architecture: **ARM64** **Task 4.3: Configure Desktop platforms** 1. File → Build Settings 2. Select Windows/Mac/Linux → Switch Platform 3. Player Settings → Other Settings: - Scripting Backend: **Mono** (faster iteration) or **IL2CPP** (release) - Architecture: **x86_64** / **Apple Silicon + Intel** **Task 4.4: Configure common Player Settings** 1. Edit → Project Settings → Player 2. Set Company Name: (your company) 3. Set Product Name: `Neighborhood Quarterback` 4. Set Default Icon: (can add later) 5. Under Resolution and Presentation: - Orientation: **Landscape Left** or **Auto Rotation** (landscape modes only) **Verification:** Build Settings shows all platforms configured. Test builds to each target (at least to build step, not full deploy). ### Phase 5: URP 2D Renderer Configuration **Task 5.1: Configure 2D Renderer for night aesthetic** 1. Open `Assets/Settings/URP/URP-2D-Renderer.asset` 2. Enable **Light2D** in Renderer Features (should be default) 3. Verify HDR is enabled in URP Asset for bloom effects later **Task 5.2: Create Main scene with proper lighting** 1. Open/Create `Assets/Scenes/Main.unity` 2. Add a Global Light 2D (GameObject → 2D Object → Light → Global Light 2D) 3. Set intensity low (~0.1-0.2) for "night" base lighting 4. This allows adding spotlights later for motion lights **Verification:** Scene has dark ambient with Global Light 2D. ### Phase 6: Git Configuration **Task 6.1: Create Unity-appropriate .gitignore** Create `.gitignore` at project root: ```gitignore # Unity generated [Ll]ibrary/ [Tt]emp/ [Oo]bj/ [Bb]uild/ [Bb]uilds/ [Ll]ogs/ [Uu]ser[Ss]ettings/ # MemoryCaptures [Mm]emoryCaptures/ # Recordings [Rr]ecordings/ # Asset meta data should be tracked !*.meta # Autogenerated VS/Rider .vsconfig *.csproj *.unityproj *.sln *.suo *.tmp *.user *.userprefs *.pidb *.booproj *.svd *.pdb *.mdb *.opendb *.VC.db # Unity3D generated meta files *.pidb.meta *.pdb.meta *.mdb.meta # Builds *.apk *.aab *.unitypackage *.app # Crashlytics crashlytics-build.properties # Packed Addressables [Aa]ddressables*.bin* # TextMeshPro [Aa]ssets/TextMesh*Pro/Resources/Fonts & Materials/*.asset # macOS .DS_Store ``` **Task 6.2: Configure Unity for version control** 1. Edit → Project Settings → Editor 2. Version Control Mode: **Visible Meta Files** 3. Asset Serialization Mode: **Force Text** **Task 6.3: Initial commit** ```bash git init git add . git commit -m "feat: Initialize Unity 6 LTS project with URP 2D scaffold - Unity 6 LTS with URP 2D Renderer - New Input System configured - Feature-based folder structure - Build targets: Android (ARM64), iOS (ARM64), Desktop - Night lighting setup for game aesthetic Co-Authored-By: Claude Opus 4.5 " ``` **Verification:** `git status` shows clean working tree. ## Acceptance Criteria - [ ] Unity 6 LTS project opens without errors - [ ] URP 2D Renderer is active (check Graphics settings) - [ ] New Input System is the active input handling mode - [ ] Folder structure matches spec (`Features/`, `Shared/`, `Settings/`, `Scenes/`) - [ ] `GameInputActions` asset exists with placeholder actions - [ ] Android build target configured (IL2CPP, ARM64, API 24+) - [ ] iOS build target configured (IL2CPP, ARM64, iOS 13+) - [ ] Desktop build targets configured - [ ] Main.unity scene has Global Light 2D with low intensity - [ ] `.gitignore` excludes Library/, Temp/, builds - [ ] Project uses text-based asset serialization - [ ] Initial git commit created ## Files Created/Modified | File | Purpose | |------|---------| | `Assets/Features/_Template/README.txt` | Template folder for new features | | `Assets/Shared/Fonts/.gitkeep` | Fonts placeholder | | `Assets/Shared/UI/.gitkeep` | UI placeholder | | `Assets/Settings/URP/*.asset` | URP configuration | | `Assets/Settings/Input/GameInputActions.inputactions` | Input action definitions | | `Assets/Scenes/Main.unity` | Entry scene | | `Packages/manifest.json` | Package dependencies | | `ProjectSettings/*.asset` | Unity project settings (auto-generated) | | `.gitignore` | Git ignore rules | ## Implementation Notes **Why IL2CPP for mobile:** Required for iOS, strongly recommended for Android performance. Use Mono on desktop during development for faster iteration. **Why ARM64 only for Android:** ARMv7 devices are <5% of market in 2026. ARM64-only reduces build size and maintenance. **Why API 24 minimum:** Android 7.0 has 99%+ coverage, provides modern APIs, supports Vulkan. **Why feature-based folders:** The soul doc identifies distinct systems (FogOfWar, Jail, Units, MotionLights). Feature-based organization keeps related code, prefabs, and art together. ## References - [Unity 6.3 LTS Release Notes](https://omitram.com/unity-6-3-lts-6000-3-0f1-full-release-notes-breakdown/) - [Unity Input System](https://unity.com/features/input-system) - [URP for Mobile](https://unity.com/games/urp) - [Unity Cross-Platform Considerations](https://docs.unity3d.com/6000.2/Documentation/Manual/CrossPlatformConsiderations.html) - Brainstorm: `docs/brainstorms/2026-01-31-unity-project-setup-brainstorm.md` - Soul Doc: `soul.md`