Unity supports external version control in Pro, and has Asset Server for those who wish to license it. Neither version would seem to be very merge-friendly, so I'm curious to hear various workflows for having several people working on a scene simultaneously.
You might want to check out our newly open-sourced(*) project Unity Text Scene, available at GitHub here: UnityTextScene project.
As it currently says in the README:
The TextScene system is intended to be a complete replacement of the Unity built-in binary scene format. The reason to hack together and use such a format, is because it is very difficult, if not impossible, to merge scene conflicts in a team environment using a binary scene format. If you don't care about diffable scenes, you should avoid this (one-man teams will most likely not benefit at all from this, unless you desperately want scene history).
(*) The code is available under an MIT license (see the LICENSE.txt file in the project).
Updated for Unity3.5:
All Unity versions (including Free) now support version control.
Steps:
- Goto Edit → Project Settings → Editor and enable External Version Control support by selecting Metafiles in the dropdown for Version Control.
- Then checkin the Assets and ProjectSettings to your SVN but ignore the Library Directory.
- Quit Unity and Delete the Library directory.
- CheckOut unity from SVN server. Press Option/Alt (recreates Library) and open Unity.
Hope this helps!
Source: http://unity3d.com/support/documentation/Manual/ExternalVersionControlSystemSupport.html
A way to do it if real source control is not an option is distributing asset bundles with the changes. Beware that there seem to be quite some bugs and differences in the importers/exporters of different versions. My designer works mainly with Unity on PC and I import it into Unity iPhone, but have to make a backup first because often after importing an asset bundle all Unity can do is crash.
Although it's not without problems (mainly the instability of Unity after imports), it is an easy method to work as long as different members of the team do quite separate things. If you have more than one coder, it could be an option to at least have the Scripts under source control (should work with even the free Unity).
The way my team does it is separate out the assets and the code (zipping up with the package option) and then using SVN to take care of it. When a person downloads the latest updates they just have to unzip the code over the assets and away they go. Then when pieces need to be merged one of the team locks everything down and creates a new build for everyone to work from.
Same goes for scenes, we'll all work on our own version off the base and then one person will take responsibility for copying it all together.
A little fiddly but it works.
Where I work, we are using an approach where the scene file is insigificant and everything is in prefabs. Scene contains drag-dropped prefabs all at (0,0,0). When someone wants to work on a prefab, then he “locks” it meaning no one else can make changes to it. After commit to Asset Server the prefab is considered “unlocked”. We do it just by telling, who will work on what, but it’s quite possible to create an editor extension to automate it. While being quite limited solution, it allows a team to work on the same scene.
You might appreciate Good SVN by Just Good Design on the Unity3D Asset Store
When we first started out using SVN we ran into multiple conflicts every time the project changed. For that reason, Good SVN broke down the commit functions into 3 main categories - all at the push of a button.
- Update/Commit Assets for code you’re working on or any file in the Assets directory.
- Update/Commit Project Settings for things like input settings, publishing settings and so on
- Update/Commit Files for items you’ve selected in Unity3D’s Project window (or right-click and item)
Because these are the things you’ll use on a daily basis there was no need to commit the entire directory every time you make a change. If that is something you need, we also added a SVN > External Folder > {Command}
Like most of these Windows solutions Good SVN uses TortoiseSVN. Good SVN can also be used on the Mac with TortoiseSVN and CrossOver. See this 12 for more info.
See this new script it’s seems to be the solution to the merge *.unity
problem.
We’re a team of 2 people working on a single scene. We’re using TartoiseSVN to do the merging of scenes and it’s been working flawlessly.
SVN installation instructions (it’s for Bluehost but the instructions are general enough for you to use it in any host):
Get TartoiseSVN here:
In the beginning, using Tartoise to merge scenes can seem a bit daunting, but apart from a few conflicts, all other changes are benign and Tartoise takes care of them.
To solve conflicts, go one by one and just arrange the thing so that blocks from the two versions don’t overlap but become contiguous to one another in the merged scene. The order of the blocks doesn’t seem to be a factor for Unity, so as long as the blocks are arranged contiguously, everything should be fine.
Just a small disclaimer. We’ve been able to successfully merge scenes this way, but we’re still in the beginning of the project though (and we only have 1 scene), so we don’t know if some scene merging can prove to be more difficult as time goes by and complexity increases (we don’t know yet).
Hope this helps.
My company, Black Storms Studios, is working on an alternative to Unity Asset Server at http://github.com/blackstorms/OpenAssetServer
We need programmers to help, though. If you know the EditorGUI class, please contact me!