Vitaliy Zasadnyy

Mastering Unity Project Folder Structure. Level 0 – Folders required for version control systems

image

In this series of posts, I’ll spot some light on Unity Project folder structure. What folders and files are required for version control systems, what are reserved folders names and their usage and as a bonus how do we organize resources and other files in our Unity projects at Nravo.

Before gamedev, I used to be an Android developer, and I really liked predefined and consistent folder structure across all projects. So I was a bit confused when we started first Unity game.

Mastering Level 0. Folders required for version control systems.

Test Unity Project Folder StructureLets

Let’s create new Unity project called “testproject”, import “Standard Assets (Mobile)” package, create new Test.cs script attached to a camera and check our folder structure.

You’ll find that there are quite a lot of files and folders, good news that only two folders should be kept under source control: Assets and ProjectSettings. Other are generated from this two.

Here is a quick overview of all files and folders.

Assembly-CSharp-vs.csproj and Assembly-CSharp.csproj – Visual Studio (with -vs suffix) and MonoDevelop project files generated for your C# scripts.

Assembly-UnityScript-vs.unityproj and Assembly-UnityScript.unityproj – the same project files but for JavaScript scripts.

testproject.sln and testproject-csharp.sln – solution files for IDEs, first one includes all C#, JavaScript and Boo projects, while the second one – only C# projects and is designed to be opened in Visual Studio, because VS doesn’t know to handle JavaScript and Boo projects.

testproject.userprefs and testproject-csharp.userprefs – configuration files where MonoDevelop stores current opened files, breakpoints, watches, etc.

All files listed above except .userprefs are re-generated each time you select Assets → Sync MonoDevelop Project in Unity Editor menu.

Read why there are so many project files generated from Unity documentation.

After syncing project MonoDevelop will open testproject.sln with all projects but if you don’t have JavaScript code you can open testproject-csharp.sln to have twice fewer project files and no errors related to JS. image

Assets – folder where all game resources are stored, including scripts, textures, sound, custom editors, etc. Definitely the most important folder in your project.

ProjectSettings – in this folder Unity stores all project settings like Physics, Tags, Player settings, etc. In other words everything you setup from Edit → Project Settings set of menus goes into this folder. image

Library – local cache for imported assets, when using external version control system should be completely ignored.

obj and Temp – folders for temporary files generated during a build, first one used by MonoDevelop, second – by Unity.

Version Control System setup

There are several options how we can keep track of versions. Traditionally Unity encourages developers to use Unity Asset Server. Our team tried to use it for one month after what we agreed that Asset Server can’t handle everything we need. It doesn’t have branches, locks, and it’s paid (requires Team Licence, +500$) and looks more like simplified SVN. So we have decided to switch to GIT.

Here is a short setup guide for Unity 4.3
  1. Enable External option in Unity → Preferences → Packages → Repository
  2. Switch to Hidden Meta Files in Editor → Project Settings → Editor → Version Control Mode
  3. Switch to Force Text in Editor → Project Settings → Editor → Asset Serialization Mode
  4. Save scene and project from File menu

Now you are ready to use your favorite version control system. Don’t forget to add everything except Assets and ProjectSettings folders to your ignore list. Here is .gitignore we use in our project:

# =============== #
# Unity generated #
# =============== #
Temp/
Library/
# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj
# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

For more detailed instructions how to setup version control checkout this posts:

In the second post, I’ll describe what predefined folder does Unity use and what for.

More posts from Mastering Unity Project Folder Structure series:


Share with: LinkedIn Twitter Facebook