How do you organize your project to reduce its complexity and size?

Hello there,

You just bought a lot of assets and now you want to put them together to create your game.
But you end with 50+ gigabytes of assets like SFXes, musics, animations, textures, models etc.
If you put everything on a single project Unity takes ages to import, search assets or compile/build the game.

How do you organize so much data and complexity?
Also, how do you share this mammoth with your team? Specially with those who don’t need to deal with code or libraries, like artists.

I thought about separating art assets to a “prefab factory project” and bring the prefabs, using unitypackages, to the main project after that.

I also thought about a solution like Projeny but it deals with symbolic links and may not be versionable.

What is the best approach? What do you suggest instead?

Regards,
R.

Hi,

In a large project, use AssetBundles and DLLs. Make one or more code projects that compile to DLL(s) in your main project. Similarly, make any number of art projects that generate AssetBundles in your main project.

This way you can make your main project as small as a single “boot” scene with some DLLs and AssetBundles.

Schell Games’ Unite presentation (slides here) was what sold me on this approach.

6 Likes

This is a bit beyond my knowledge, but assuming some of these assets you purchased are tools that generate content, you can leave those in a separate project, use them to produce the assets you need, and then export the final result (along with any dependencies).

Example 1 : You use Gaia to make a terrain with splat maps. Export the terrain and maps, along with the necessary textures, to your final project.

Example 2 : You have a huge library of textures and vegetation models and materials. You want them all there to pick and choose from, but once you have played around enough to find your bare essentials, you only export those to your level builder project (which may be separated from your prototype mechanics project, and so on).

Pretty obvious and I think you are already doing this, but maybe it’ll help.

2 Likes

Thanks.
Do you automate the bundle’s generation somehow?

Yes, but I use a tool that’s unfortunately deprecated and no longer available. If you search the Asset Store for “assetbundle” you can find a number of tools to help manage assetbundles.

1 Like

Was it uTomate?
Do you have a suggestion?

Yes.

I don’t have personal experience with any of the others on the store. Hopefully their reviews will help you make a good decision.

1 Like

utomate is depreciated since a year if i remember well. but unity made their own version, it can be used to manage asset bundles & build pipeline:
i strongly recommend this over utomate to manage build pipeline.
https://bitbucket.org/Unity-Technologies/assetbundlegraphtool

to manage asset bundle i like to use the asset bundle browser instead

2 Likes

Thank you very much. Very interesting.

Hi Rod-Galvao,

Short version: I am the author of Upkit, a free and open source tool that may help you solve your problem.
Github: GitHub - finderseyes/upkit: Project and package manager for Unity

Long version: We also faced your issue too, and created Upkit to solve it. Although our projects are not dozen of GBs, they easily take a few GBs and eat a lot of (network, time) bandwidth. Cloning, opening, building seemed like forever. Even for prototyping, the temporary assets take a large portion of the project space. We wanted to quickly swap packages without having to actually commit them into the repository.

Initially we decided to use Projeny, and split up the project into different packages, put them on Nuget and Git, then clone them separately, on demand. We had to come up with a tool - Upkit - to let us do this. Yet we kept adding features to the tool and now it replaces Projeny and becomes our project generator and dependency manager. It has a cool feature that let you resolve packages directly from Nuget and Git.

Regarding to versioning with links, it should not be an issue if you:

  • Only store assets/code in your repository
  • Split your assets/code into smaller units, and put them in multiple Git or Nuget packages
  • Use Upkit to generate the Unity project after cloning/updating your dependencies

Hope this helps.

1 Like