You have a project started, you have your team assembled, now how do you manage your level files when a designer, programmer and three artists need to work on the same one? They could each wait their turn, but that would take forever! In this tutorial I will discuss how to use the level streaming system to let multiple team members work on the same level file. First, I will discuss a few source control programs you can use to make sure everyone on your team has the same content.
Revision control software provides a way for multiple team members to work with the same files by having them stored in a central location. People can make changes to the files and check them back in, and other team members can then update their project with the current version of all files. Some software allows you to lock files so other people can’t edit them until you check them back in. Most come with conflict resolution that allows files to be merged, although this mainly only applies to text files, in the UDK’s case it would work with ini, int and uc files but not, for example, level files.
Let’s go over a few programs that are commonly used in the game industry.
Tortoise SVN – Tortoise is a free Subversion program that integrates into the Windows shell to make its commands available in the Windows Explorer context menu by right clicking on folders. Once set up it’s easy to use, but it’s difficult for someone new to SVN to install and run the server that keeps the master repository for the files.
Perforce – For those with a software budget, Perforce may be your revision control of choice. It requires a license for more than two team members. The Unreal Editor has Perforce integration.
DropBox – For those with smaller budgets, DropBox may be sufficient. DropBox isn’t exactly a revision control software, but it does allow file changes to be undone and files to be undeleted. Setting it up is also much easier than Perforce or Tortoise.
No matter what revision control software you use, it still won’t solve the main problem you’ll run into when multiple team members are working on a UDK project, the levels. Programmers and designers will need to work with the actors and kismet in them, while at the same time artists will be adding their assets to the levels. For a solution to this, we’ll take a look at the level streaming system.
Although mainly designed to limit loading times and memory usage, the level streaming system can also help multiple people work in the same level. A level called the Persistent Level streams in other levels. Any level can be used as a Persistent Level. For now, open the editor without loading any level. In the Content Browser, press the Levels tab, and hit File >> New Level.
Give the level a name. To figure out what to name it, think of the purpose you’ll want for this level. The Persistent Level should contain all of the Kismet and gameplay related actors such as objective points or path nodes, and the streamed levels should mainly be used for art assets. If you had an artist dedicated to making terrain and foliage, you might put something like “_Vegetation” at the end of the level name.
Once the level is named the editor will ask you which method to use for streaming. Leave it at Kismet.
Once you have all the levels created, press the Save All button.
You can create as many streamed levels as you need, as an example I’ve created a streamed level for Vegetation, Buildings and Props here:
The Persistent Level and streamed levels can now be checked in to your source control software. As an artist, when working with this setup you would open the Persistent Level in the editor, then immediately set it to the level you want to work in by right clicking it in the Levels tab and hitting Make Current. THIS IS IMPORTANT as it keeps you from accidentally adding assets to the Persistent Level.
Make sure that the level you want to work in says CURRENT LEVEL after it:
Even though the levels are set to stream in, they won’t automatically show up when the Persistent Level is played. To do that, we need to add a small bit of Kismet to the Persistent Level. Add a New Event >> Level Loaded, and connect the Loaded and Visible output to a New Action >> Level >> Stream Levels.
It will show up with a red X at first, so let’s fill in the Seq Act_Multi Level Streaming >> Levels array with our level names:
Once the level names are in, the Kismet action will turn green. If not, check the spelling of your level names.
That’s it for the setup! The level can now be played properly, and artists and designers can now work on the level at the same time.
If you find yourself accidentally adding actors to the wrong level, you can easily move them by making the desired level your Current Level, selecting the actors, right clicking them and hitting Level >> Move Selected Actors to Current Level.
As an option, once the level is nearing completion and not as many people need access to it at any one time, the Persistent Level and streamed levels can be flattened into one level. In the Levels tab, hit Level >> Merge Levels into New Level:
Remember to keep any gameplay related actors in the Persistent Level. This includes any art assets that act as gameplay actors such as doors etc. It is possible to keep them in the streamed levels, and if the Kismet for them is simple and self contained this could work, but to keep things organized and prevent problems if you’re planning on flattening the levels at the end it’s best to keep all of the Kismet in the Persistent Level.
I hope this helps some of you, and if you have any ideas for things you’d like to see in future tutorials please leave a comment!