10.1 Packaging a build
Platforms(top toolbar) → Package Project → choose platform (Windows/Mac/Linux/Android…). First you may set Project Settings → Packaging (Shipping vs Development config, which maps to include, compression).- Build configs: Debug (slow, full debug), Development (fast iteration, has logging/console), Shipping (optimized, stripped — what players get).
- Output is a standalone build. Test the packaged build, not just PIE — bugs hide in the difference (asset references,
WITH_EDITOR-only code, async timing). - Set default maps (Project Settings → Maps & Modes): the editor startup map and the game’s default map.
10.2 Source control (do this from day one)
- Unreal integrates with Perforce (the industry standard for big binary projects), Git, and others (
Revision Controlmenu). - For solo/indie, Git + Git LFS is fine. Track
.uasset/.umapas LFS (they’re binary). Use One File Per Actor so level edits don’t collide. - Set up Git LFS first, then add a
.gitignorethat excludes only generated folders. From the project root:
git lfs install
git lfs track "*.uasset" "*.umap" # records them in .gitattributes
# common extras: git lfs track "*.fbx" "*.wav" "*.png" "*.exr"
git add .gitattributes
# .gitignore - generated folders only
Binaries/
DerivedDataCache/
Intermediate/
Saved/
.vs/
*.sln
/Builds/ # packaged build OUTPUT (Platforms -> Package) - never commit cooked builds
# Keep (commit these): Config/ Content/ Source/ Plugins/ Build/ *.uproject .gitattributes
# Note the singular vs plural: commit Build/ (platform icons, packaging config); ignore Builds/ (your packaged output).
- Caveat: Blueprints/maps are binary — Git can’t merge them. Coordinate so two people don’t edit the same Blueprint simultaneously (Perforce’s exclusive checkout solves this; Git LFS file locking helps).
10.3 Project organization
A scalable folder convention (consistency matters more than the exact scheme):
Content/
_Project/ # leading underscore sorts your stuff to the top
Blueprints/
Characters/
Maps/
Materials/
UI/
Audio/
VFX/
Developers/ # personal scratch space (excluded from cooked builds)
- Naming conventions: prefix by type —
BP_Blueprint,M_Material,MI_Material Instance,T_Texture,SM_Static Mesh,SK_Skeletal Mesh,A_Anim,S_Sound,WBP_Widget Blueprint. (Allar’s “ue5-style-guide” is the community standard — search it.) - Keep gameplay base classes in C++, designer-facing subclasses in Blueprint (Part 2).
- Use Plugins to modularize big features so they’re reusable and toggle-able.
Put WISP under Git + LFS with the gitignore above. Make a Development and a Shipping packaged build of L_Hollow_3D; note the size and behavior difference, and play the Shipping build start to finish against the Definition of Done in the capstone section. Reorganize Content/_Wisp/ to the naming convention and fix any broken references (right-click a folder → “Fix Up Redirectors”). If a fresh player can menu → collect → relight every beacon → survive → win → reload their save, all at a stable frame rate: WISP’s vertical slice is done. That’s a complete shipped game loop, built from an empty project.