LYNX Lunar Racer is a game for Android, iOS, and desktop. (Game removed due to trademark licence ending)
It features 9 zones, 4 vehicles, various upgrade options and hours of gameplay. For the game build we used Unity3D and one source code to target all the different platforms. On this page we wanted to share some of the process of building the game.
Over the course of 12 weeks about 8 people got involved with the project – 2 developers, 2 artists, 2 designers, 2 producers and 1 tester.
For the 4 vehicles we wanted a fun yet distinct design for each so that they would feel very different to drive. The vehicles were created in 3ds Max and the environments in Maya. Rigging and physics setup was done in Unity as each vehicle needed its own tweaks to improve handling.
For the unwrapping we used TexTools inside 3ds Max. Textures were painted partially in Blender and partially in Photoshop using the projection painting and 3D model import functionality.
The level pieces were created in 3ds Max and Maya with greyscale ambient occlusion vertex colors baked in. Both 3ds Max and Maya have built-in vertex color ambient occlusion baking tools. A Unity import script we wrote converts the greyscale vertex colors into a color gradient of teal and blue color sets.
Because the level doesn’t use any textures the game achieved great performance results compared to a light-map backed solution.
Each modular piece had to be set up in Unity with custom rigs or colliders to match collisions with the physics model of game.
Both the vertices and collision objects are deformed at runtime to match automatic generated level design. This allowed us to build detailed, lengthy levels and iterate by simply updating the prefabs. Key level elements within the zones such as ramps were added manually in the code at specific locations.
We used the same process for the level background. Buildings and decorative elements were added via code, not via the traditional level editing process.
The UI uses a lot of different fonts. Since we wanted to have crispy UI graphics each font size was saved separately.
The screen shot below is from NGUI inside Unity3D. On the right are the sprites used as part of the bigger texture atlas that was employed for the dynamic text.
Using ShoeBox’s Bitmap Font tool we then created *.FNT (bitmap font file) fonts, which are spritesheets with a lookup table for each character. GUI frameworks such as NGUI support these font types and render them as part of the UI.
For the UI we used NGUI for Unity. Some additional scripts were created to add additional UI transitions, such as sliding elements in and out, fading UI states or simply animating various elements. One of the reasons we went with NGUI was the ability to adapt the liquid layout to any of the target platforms, including tablets, phones (Android & iOS) and desktops.
Creating UI states in Unity is very similar to creating UIs in the Flash IDE. Different types of UI core elements such as sprites, sliced sprites, buttons and more are built using Unity GameObjects and real-time previewed inside the Unity Editor.
Each UI element sprite or tile was stored in a 2048 x 2048 mega sprite sheet.
Early on we knew we had to target different platforms, regions and potentially different languages. The technical platforms the game had to support were:
- Windows desktop,
- Mac desktop,
- Android phone,
- Android tablet,
- iPad mini
To distinguish between phone and tablet we estimated the physical screen size (which can be computed via the DPI settings of a device). Depending on the physical size of the screen the game resizes the whole UI and makes small variations to the layout. We used compiler flags (scripting define symbols) and platform-dependent variations to differentiate between specific regions, date and time to determine competition dates among many other variables.
The icon went through many variations and we tested icon designs by running targetted Facebook ads looking for the best CTRs.
A new icon featuring the buggy itself has been designed and will roll out with next update. It’s a more literal representation of the game and that performs better on the app store.
Here is a older version of the icon. Because the image was so difficult to interpret at smaller sizes we had to simplify many times.