Search public documentation:
- Directory layout
- Game-specific directories (e.g. UTGame)
- Additional Considerations
- Architecture Overview
The Unreal Engine 3 directory structure was designed to allow multiple games sharing the same code to coexist side by side. The idea is to have one centralized code base to which additional game-specific modules can be appended. In addition to the code base, other things such as tools and documentation are often shared amongst the projects. For content, the base game engine sits along side any game-specific content. In the past the main areas of conflict have been:
- Localization files
- Configuration files
- Script files
- Log files
- Content (maps, packages) - Shared and Game-specific
- Binaries - Shared and Game-specific
- Game specific extensions (e.g. for maps) and protocols
- Lots of hard coded names and assumptions in Unreal Engine 3
All bit independent (managed code compiled as 'Any CPU') binaries are stored here with their associated pdb files. There are also forwarding executables for the games so commandlets can be run from this folder; they run the default native version.
All non content-related development is centralized in the Development directory.
There will be one directory for each game project, including the base Engine. For each game project, including the base Engine, there will be one or more directories that contain elements specific to that project. configuration files reside in the Engine\Config directory. These files, with the .ini extension, are BaseEngine.ini, BaseEditor.ini, BaseGame.ini and BaseInput.ini with configuration options split accordingly. These base configuration files are referenced by the respective per game/mod default INIs like DefaultEngine.ini, DefaultEditor.ini, DefaultGame.ini and DefaultInput.ini. Each of these INI files reside in the game specific configuration directory - "GameName"Game\Config. On initialization, the engine tries to locate "GameName"Game\Config\"GameName"*.ini for Engine, Editor, Game and Input inis and will create a new version of the respective files based on the defaults contain in Default*.ini file's Configuration.BasedOn field, recursively searching until a root ini has been found. Upon finding the INI file, it then merge settings bottom up. The engine has special support for merging ini files by treating lines starting with `+' or `-` differently. The default action is to replace existing keys, `+' tells the engine to append which is useful for expanding TArrays and `-` will remove a key/value pair defined in the base ini. localized text files in a configurable selection of paths (Core.System.LocalizationPaths, defaulting to "Engine\Localization"). When localizing a resource, it first looks in the currently configured language localization file. If it fails to find a localized version of that resource, it then looks for an entry in the international localization file.
[URL] Protocol=unreal Name=Player Map=Index.ue3 LocalMap=Entry.upk MapExt=ue3 [Core.System] Paths=..\Engine\Content LocalizationPaths=..\Engine\Localization Extensions=upk Extensions=ue3 Extensions=u [Editor.EditorEngine] AutoSaveDir=..\Engine\Content\Maps\Autosaves EditPackagesInPath=..\Development\Src EditPackages=Core EditPackages=Engine EditPackages=Editor EditPackages=UnrealEd EditPackages=SequenceObjects EditPackages=GamePlay EditPackages=WarfareGame EditPackages=SampleNativePackage [D3DDrv.D3DRenderDevice] ShaderPath=..\Engine\ShadersSnippets from DefaultEngine.ini (ExampleGame)
[Configuration] BasedOn=..\Engine\Config\BaseEngine.ini [Core.System] +Paths=..\ExampleGame\Content +Paths=..\ExampleGame\Script +LocalizationPaths=..\ExampleGame\Localization [Editor.EditorEngine] EditPackagesOutPath=..\ExampleGame\Script AutoSaveDir=..\ExampleGame\Content\Maps\Autosaves