Unity Project Structure: Best Practices for Indie & AA Studios
How to organize a Unity project so it scales past 10 contributors without merge hell. Folders, addressables, asmdefs, and review automation.
·10 min read
Unity projects do not collapse from technical debt. They collapse from merge conflicts on .meta files at 2am. Below is the structure we recommend after auditing 60+ studios from 3-person indies to 80-person AA teams.
Top-level folders
Assets/
_Project/ # all your code, scenes, prefabs, configs
Scripts/
Scenes/
Prefabs/
ScriptableObjects/
Settings/ # render pipeline assets, input actions
Art/ # raw art (textures, models, animations)
Audio/
ThirdParty/ # untouched external packages
Plugins/ # native binaries, .dll, .aar
Packages/
ProjectSettings/Underscore-prefixed _Project sorts first in every file picker. Everything you wrote is in one root.
Assembly definitions are not optional
Without asmdefs, every script change recompiles every script. With asmdefs, you cut iteration time by 70-90% on projects past 500 scripts.
_Project/
Scripts/
Gameplay/
Gameplay.asmdef
UI/
UI.asmdef
Networking/
Networking.asmdef
Tests/
Tests.asmdef (references all above, type: TestAssemblies)Rule: every gameplay system gets its own asmdef. UI references Gameplay, never the reverse.
Addressables over Resources
The Resources/ folder is loaded into RAM in full at build time. On a 4GB Quest 2 build, that's a guaranteed crash. Use Addressables for everything you don't ship statically:
- Scene-specific prefabs → addressable group per scene
- Localization assets → addressable group per language, downloadable
- DLC content → remote addressable groups served from CDN
Source control hygiene
- Force Text serialization (Edit → Project Settings → Editor → Asset Serialization).
- Use Smart Merge (UnityYAMLMerge) configured in
.gitconfigfor scenes/prefabs. - Never commit
Library/,Temp/,obj/,Logs/. - Always commit
.metafiles — losing them detaches references silently.
Automating the rules
None of this matters if it's a wiki page nobody reads. The ShintTools Unity plugin scans your project locally and reports drift: assets in wrong folders, missing asmdefs, addressable misconfiguration, Resources/ growth. It runs offline — no source code leaves your network.
Free tier: 500 scans/month, one engine. Enough for a 5-person team to keep a project clean. Indie and Studio plans add CI integration and custom rule packs.