top of page

Team Size

Solo + 1 Musician

Role

Everything (besides music)

Genres

Platformer

Engine

Unity (C#)

Year

2025

Platform

PC

Metropolitana

Personal Development Project

​Race down the streets of a cyberpunk city on your hoverboard and hitchhike on top of metro trains. Deliver packages for the people of the city while dodging and avoiding police drones.


This game was made as a personal development project with the goal of improving my skills in using Unity and programming in C#, as well as practice the development pipeline of 3D movement-heavy gameplay.

Technical Feature Highlights

Drones

drones3_edited.jpg

The drones are designed to be a threatening presence. They react to the player depending on their distance and clearly signal their current state to them through animations and sounds.

  • ​The drones use raycasts to detect if the player is within distance and within Line of Sight, transitioning between various behaviour states in response.

  • Patrol - default state when the player is not in range. The drone observes its surroundings, guarding certain areas from the player's presence.

  • Warning - the drone raises its wings in warning and rotates towards the player when they come in range. Warns the player against coming any closer.

  • Chase - the drone starts chasing the player if they come too close. It will attempt to move to the last seen position of the player if they lose them.

  • Scan - if the player is lost, the drone performs a sweep scan in an attempt to find them. If they can't, they will return to their patrol point to resume their duty.

Metro System

The trains are used to connect various parts of the city and provide observant players with shortcuts. To add challenge and fun to the tunnel rides, the player has to move deadly obstacles out of the way while attached to the moving train.

  • Trains move between waypoints in a loop, with special stopping behaviour at ones marked as stations.​

  • Player detection volumes at station entrances summon the trains when they enter, allowing them to instantly get on without waiting.

  • While attached to the trains, the player's inputs are used to allow them to move the obstacles in the tunnels out of the way for added challenge.

  • The trains boast several anti-frustration features, such as being instantly resummoned if they leave without the player, or respawning back at the last station if the player dies to an obstacle, allowing them to easily retry failed tunnel segments.

train1_edited.jpg

Player Movement

movement3png_edited_edited.jpg

The character controller was set up to feel speedy, responsive, and with plenty of expression, allowing the player to navigate the city and its several platforming segments with ease and enjoyment.

  • ​Integrated Kinematic Character Controller, Input Action system, and Cinemachine packages for an easily controllable, industry-standard coding & development environment.

  • Physics-based movement - the player's velocity is calculated with camera-defined forward direction using gravity and drag forces to create realistic and responsive movement.

  • Orbiting player-controlled camera - utilises movement dampingFOV shifts based on speed, and object collisions to achieve a reliable and satisfying camera motion.

  • Double jumps allow the player a much greater degree of mobility, with coyote time added to reduce player frustration during the platforming-heavy segments.

  • The code switches between different input states depending on context, with default movement for normal gameplay, train riding for interacting with metro obstacles, and noclip for much easier debugging and testing.

  • Added gamepad support with alternative input bindings, controller change detection, and UI updates to reflect different control schemes.

  • Clear signalling through animations, VFX, and sounds create a polished, well-signified playing experience.

Jumping

One of the main inspirations for this game is Warframe, specifically its K-Drive hoverboard vehicles. The player's movement scheme in my game has been largely modelled after it. The main exception is the lack of a charged jump mechanic, which was originally present in earlier versions of the game but has since been changed to be instant as a result of playtesting.

Player feedback indicated that performing a jump felt as if it had input lag due to only activating on button release, even if it was tapped and immediately released. Playtesters would also rarely use the charged jump mechanic, opting to only use regular and double jumps to move around the city. In response, I have changed the jumping code to be instant and found that it felt much more responsive and consistent compared to before, improving the game feel of interacting with the movement system. It also allowed me to improve several platforming sections by being able to better predict the lengths and speeds of player jumps.

Team Members

Jan Karmański (me!)

Everything (except music)

    Billy Godfrey

    Music

    • link-48

    My Responsibilities

    • Programming

      • Player Movement & Camera

      • Metro Trains

      • Enemy Drone AI

      • Deliveries System

      • Death & Respawning

    • Level Design

      • Level Blockouts, City Layout, Polished Visuals

      • Player Paths & Navigation

    • Assets & Visuals

      • 3D Models & Animations - Player, Drones, Props, Environment (created using Blender)

      • UI

      • Audio Triggers & Sounds

      • VFX & Post-Processing (in Universal Render Pipeline)

    bottom of page