Programmer, Developer, Architect | Core / Systems
(Android | IOS, Made with Unity3D )
Mini Car Rush was originally intended to be a sequel to Mini Car Racing. However, it eventually transformed into a distinct game of its own. The primary objective was to create a scalable and modifiable architecture that focused on the communication between components without creating dependency chains. To achieve this, a Scriptable Architecture was implemented, which utilized Game Events and Channels to reduce coupling and enhance cohesion.
My initial role was to ensure that the entire team of around four developers had a clear understanding of the architecture. To demonstrate the power of the architecture, I created various small components that served as examples and could be utilized in multiple games. For player controls, we employed a Finite State Machine, which proved to be an excellent choice as it minimized the potential for state-related bugs and simplified the development process.
One unique feature of the swipe controls in Mini Car Rush was the ability for the user to play the game without lifting their finger. Unlike most other endless runners, the player could change the direction right from where the previous action ended on the screen.
A notable aspect of Mini Car Rush was its procedural generation of obstacles and coins, combined with carefully crafted custom encounters. The coins were procedurally generated in a way that guided the player to avoid obstacles and created a realistic placement of coins within reach.
Performance was a significant concern for us, considering the fast-paced nature of the action game. Even minor stutters or frame drops could result in input misses and cause the player to crash. To maximize performance, we implemented various techniques, such as obstacle and environment pooling, shaders prewarming, instancing, and creating skeletons for larger objects like custom encounters. These optimizations were set up at runtime to minimize stutters. We also conducted thorough profiling of the game to minimize resource consumption, allowing it to run at a high frame rate of up to 120 fps.
Another crucial aspect of the game was the inclusion of a competitive element. To achieve this, I developed three different variations of custom leaderboards using the FireStore database and FireBase authentication. Additionally, a NodeJS server was deployed to support these features.
• Implemented the scriptable object architecture and explained it to my co-developers, helping them thoroughly understand it through the use of playable game features.
• Reduced coupling by utilizing Game Events and Communication Channels built upon scriptable objects.
• Supervised and assisted in architecting various core game features such as the spawning system and player state machine.
• Programmed essential core game features, including player controls, environment spawning, procedural coin generation, save system, power-up functionality, chaser mechanics, and other necessary components.
• Implemented the camera system using CineMachine to accommodate different player states and managed/tweaked the camera transitions.
• Implemented best practices to minimize conflicts by adhering to the agreed-upon architecture and conventions.
• Profiled, analyzed, and optimized the entire game, including UI, gameplay, and asset loading.
• Minimized stuttering and stabilized frame times, especially during gameplay, by employing techniques such as pooling, caching, and asynchronous loading.
• Ensured that the game can run at a minimum of 30 fps on supported hardware, while higher-end devices can reach up to 120 fps for a smoother experience.
• Reduced the occurrence of ANR (Application Not Responding) to less than 0.1 percent by eliminating any potential main thread blocking scenarios.
• Developed a custom weekly leaderboard server using JavaScript on Node.js, utilizing Firestore database and Firestore authentication.
• Implemented front-end code to interact with the Leaderboard API.
• I handled and programmed various edge cases, such as firebase account switching, linking social accounts, network failures, timeouts, and more.
• Developed the game infrastructure using a scriptable architecture.
• Created modular and extendable features, such as the Save File System, Scene Loading System, In-App System, and the Plugins Initializer, among others.