Skyborne Flight Demo (WIP)
The Skyborne project is being developed at the requet of Skyborne, a Aircraft Pilot Training company who wished for development of game to drive customer engagement.
My role was is focused on the Flight Simulation for the project.
A core principle on the development of this project was clear seperation of concerns, keeping the Input and Controller of the Aircraft as agnostic of each other as possible.
Flight Input
This Aircraft Input script handled all player interaction for the Skyborne flight simulation using Unity’s New Input System, providing a clean and flexible abstraction over multiple control schemes including keyboard and mouse, gamepad, and joystick.
It normalised and exposed continuous flight control inputs (throttle, pitch, roll, and yaw) and dynamically adapted behaviour based on the active control scheme (such as joystick-specific throttle handling) .
In addition, it managed discrete actions such as braking, and camera controls through event-driven callbacks, allowing the flight model and gameplay systems to remain fully decoupled from raw input logic.
Flight Controller
This Aircraft Controller script formed the core of my Skyborne flight simulation, acting as the bridge between player input, aerodynamic modelling, and Unity’s physics system.
It translated normalised inputs into realistic control surface behaviour, calculated key flight states such as local velocity and angle of attack, and converted these into physically based forces including thrust, lift, drag, induced drag, and rotational torque.
These forces were applied directly to the aircraft’s Rigidbody, producing believable flight behaviour driven by physics rather than hard constraints.
Aircraft Values
The AircraftCurrentValues system acted as the shared data backbone of the Skyborne flight simulation, centralising all tunable aircraft parameters, live flight control states, calculated forces, and derived flight metrics into a clean, reusable structure.
By separating immutable aircraft characteristics (via ScriptableObject base values) from runtime-calculated data such as angle of attack, local velocity, lift, drag, and level of flight, it enabled a clear and scalable flow of information between input handling, physics simulation, and UI systems.
This design reduced coupling between systems, supported rapid iteration through data-driven tuning, and ensured consistent, physically grounded values were accessible wherever they were needed during the simulation loop.
