View the GitHub here: https://github.com/raiderack/Physics-Movement-Prototype-2

For a project with Cernunnox, a game studio my friends and I created, we wanted to make a movement system for a sphere that integrated into the existing Unity physics system. This movement system had to appeal to a casual market, so simplicity was top priority. We also needed to emphasize impact. The goal of the system was to be able to move your marble around, while being able to impact and dodge other marbles. The system needed to have weight, to make the player feel fast, feel powerful, but also have strategy. Using a force-based system as opposed to a velocity-based system allows seamless integration into Unity’s existing physics, meaning all it takes to calculate dynamic and proportional collisions is a few lines of code. The problem was that is you just say, add a force vector while a button is held down, you quickly gain too much momentum and cannot change direction quickly, inhibiting player reactions. To fix these, I implemented a system that applies a force vector calculated by subtracting a target speed and the player’s current speed.

This means that when stationary, the first movement is sharp, but the rest slowly build up to a max speed. This allowed the player to build up momentum, but still be able to change directions and reaction to stimuli quickly. The result is a simple movement system that satisfies the casual audience by only using “WASD” or a joystick to move, but facilitating moment-to-moment decision-making based on the risk vs reward of speeding up and hitting with more force, or slowing down and having more control. The prototype also includes a primitive saving system as well a skin selector for the marble under the “Collection” tab.
