< Return to Academics
Bikin'Ice
Project Size
~100 hours, 5 people
Tools & Languages
Unity, C#, Perforce, Hack'n'Plan
Roles
Gameplay Programmer
Game Designer
Description
Bikin' Ice is a couch PVP, where you can challenge up to 3 friends to fight for the most coins. Ride around on your bike while picking up items to steal coins from other players. May the best ice cream win!
Over the course of the semester, this project was developed where each of us were expected to work ~10 hours every week. During the first few weeks, we did brainstorming and created game design and tech documents. The next few weeks were spent prototyping before eventually getting into production and polish sprints.
My Main Tasks
Bike Physics Controller
The core of the controller consists of a Rigidbody attached to a sphere collider, to which forces are applied based on the visual direction of the player. This simplifies physics dramatically, and seperates the physics from the player visuals.
To make controlling a bit easier, there are extra forces applied to slow down and avoid sliding or drifting. The drag and sideways forces are reduced during drift, making the surface feel more slippery.
Local Co-Op
Using Unity's Input System, I set up multiplayer controls by binding each controller to a specific input user. This makes sure that every controller only receives input from one gamepad.
Correctly binding these controls turned out to be quite tricky as the default player input manager didn't quite cover the needed features. So instead, I wrote a system which is similar to how Unreal Engine handles multiplayer: each player has their own playercontroller which can possess a player, from there it updates the camera viewport and UI accordingly.
Player Feedback
During the last few weeks, I spent most of my time adding support for SFX, VFX and general player feedback. The sound system implemented, covers both 2D audio as well as 3D audio with linear falloff based on the nearest camera.
Additional feedback through gamepad vibration and camera shake are handled through the player controller, which keeps track of the highest priority and updates durations before applying the effect.