Throughout the two last game projects, I have been working on the level importer between the level editor (Unity) and our game engine. The level importer, as a whole, contains two separate parts. One part in Unity, written in C# where the user can export a whole scene into a .json file and the prefabs existing in the repository. The other part using C++ to extract data from the .json file into the engine.
Worked on the level importer during two game projects
Written in C# and C ++
Uses RapidJSON library
Easy debugging with .json files
Supports parent/child hierarchy
Features local changes made on prefabs in a scene
In the first game project, we used the level importer the game engine didn't support hierarchy so the level importer didn't. But as we started the second game project we soon realised the need for hierarchies and I iterated on the level importer to support it. Below are two screenshots of the same spot in the level, in Unity and the engine. As shown, the level importer can handle hierarchies.
With a simple click on a button in Unity, the user can export the active scene to .json. The exporter script can detect when a local change in a prefab is made and export the prefabs in the scene .json file. The exporter script can easily be replicated to components which make it highly useable. The scene exporter also takes into account if there are any hierarchies in the scene.
The level importer in the game engine has a corresponding list of components to which component are exciting in Unity, but it also supports loading of engine specific components sush as splash component. The UI system also uses the level importer to launch the menus.
Example of a component in unity
The user can export all of the prefabs in the repository with a click of a button. The prefab contains all of the data the engine needs to create a prefab in-engine.
An imported scene is full of prefabs which the level importer loads from different files depending on which prefab should be used. In-engine, a programmer can easily spawn a prefab from everywhere in the engine since the level importer is a static class.
In the next project, I want to make the level importer faster by converting the file format from .json to binary.