Splitting complex project into multiple projects

Bare with me, this is going to be a long post. I'm going to describe our situation, detail our current problem, and outline a possible solution to our issue for feedback.

We have a rather large Unity Project being built for a client. Currently there are 1331 files and 167 folders at a size of 770 megabytes. The project is likely to grow upwards to 2-3 gigabytes before the final release of the game.

Currently, it takes upwards to an hour on our dev machines (which are fairly beefy) to load a project when Unity decides to refresh the asset database on start up. This unfortunately tends to occur quite often (almost daily) after pulling down the latest source code and then proceeding to open Unity.

This is often fairly frustrating as Unity will often randomly crash on import. Some mornings (such as today), it took me up to 2.5 hours before I finally got the darn project to open. Each time the editor crashed, it would tell me the asset database needed to be rebuilt again. This process has become quite time consuming for members working on the project. I would be willing to say that 25% of the team (of 10-12 people) is spent each day just trying to get the project to load.

General Observations: 1.) Perforce does not work well with Unity since. Unity has a habit of deleting and recreating the files locally (even if they are read only). This causes the infamous 'clobber' error Perforce spits out when a file under source control no longer has its 'read only' property set. We have tried using the 'reconcile offline work' feature to resolve some of these issues with little luck. Typically it's proven to cause more of an issue then it has resolved. 2.) When having a large team of developers and that many files, it becomes a pain to manage all of the meta files. Sometimes people forget to add/delete them from the repository.

In need of a way to speed up development. We were wondering if it would be feasible to move a significant amount of scenes and assets to a second Unity Project. In our current scenario, all of the scenes and assets are compiled into asset bundles. It may be possible to divide our project into two projects.

1.) Master Project - Would contain all of the code scripts, a single startup scene, and all of the prefabs with script components. 2.) Asset Project - Would contain all (or some) of the scenes and assets.

The scenes could be reworked such that all of the script components could be stripped out. We would the rely on some code to hook the needed components up during run time.

Has anyone tried to split a project over multiple projects before? What problems did you run into (besides the obvious scripting issues)? Is there any possibility that both projects could chose to assign the exact same GUID to a resource?

You can split your project into asset bundles and have each asset bundle as a separate project. It even recommends as much in the documents:

http://unity3d.com/support/documentation/ScriptReference/AssetBundle.html

http://unity3d.com/support/resources/example-projects/assetbundles

http://unity3d.com/support/resources/example-projects/charactercustomization

It's also how they recommend developers implement downloadable content so you can be sure what's in the main game and what comes as download.

For your problem it'd make sense to split the assets of each scene into its own asset bundle and project. You can then stream load the bundles as you play if it's a web based game (probably not judging by the size) or you could store all the bundles in the install folder and load them at run time, or you can combine them all at the end for a final build.

Asset bundles also has the added benefit of letting you more closely manage your memory usage.