top of page

Uppercut City

Collaborated with a team to produce this game with original artwork, shaders, and style. I Focused on character design, IK Rig procedural animation, animation programming, and gameplay programming. Also put significant work on Menu & UI.


Game Mechanics

Based on classics like Fight Night Round 3 we wanted to deliver a mostly realistic boxing simulation game. Like in FNR3 we wanted to let the player throw a variety of punches while being able to lean they're body The player can throw jabs hooks and uppercuts with either hand all of which can target either the body or head. They can also use a skill based blocking mechanism: If the defender blocks the correct spot and "catches" the attacker's punch, they get an opportunity to counter. Adding to the complexity, the player can also pivot the upper body from the waist allowing them to dodge punches.



This meant that punches would be thrown from different angles towards different targets. To solve this I implemented Unity's Animation Rigging tools and programmed an IK Rig system that would manually change the boxer's hand position. I used animation curves to blend the IK constraints in time with the punch animations. The punches would be altered to move the hand towards a punch target that follows around the opponent.


There was also the challenge of blending animations together. The player's upper body was free to pivot around the waist. That means punching and blocking animations have to blend together with upper body and leg animation. I implemented a solution using Unity's Animator Controller and State Machine Behavior scripts. Starting with animations authored in Cascadeur, the Animator's state machine logic was divided into separate layers. Each layer would respond to inputs and game events based on conditions and transition logic.



The IK Rig effects were blended in seemlessly through State Machine Behavior scripts, the animation layers were coordinated making for realistic combat, and the IK Rig enabled the punches to track moving targets. The result was a smooth boxing experience that serves as an excellent foundation to refine and improve upon in future updates.

Anime Art Style

In designing the style of the game I decided to go with Anime as it would give some liberties with the character design. Going for ultra realistic graphics would make character modelling a much bigger job whereas Anime does not require such a high level of detail. We also had, on the team, a good amount of experience making games with this style.



Essential to the style was making the muscular physique of characters. Based on other Anime works I used Blender to define and sculpt the shapes and curves of the boxers' bodies. I had to be careful not to fall into the uncanny valley.


The uncanny valley is a phenomenon that occurs where an audience has a non-empathic response to the characters with respect to their realism. If the characters fall just short of realistic the audience doesn't empathize with them; they respond like they're seeing an imposter.


By taking inspiration from good source material and getting feedback from the team I ended up with two characters that steered clear of the uncanny valley and had the exagerated physique one would expect from an Anime boxing game.


The last piece of the puzzle was the Shader in Unity. We made use of Shader Graph along with Unity's Universal Render Pipeline to add black outlines and limit light tones to 3 distinct shades. The result is spectacular and the whole team was very proud of how it turned out.



Character Pipeline

With the art style and gameplay in mind we would need 3D characters compatible with Blender, Cascadeur, and Unity. We would need to work on different parts of the character at the same time without interfering with one another. I developed a workflow that would start with a humanoid rig and generic mesh. Cascadeur allows us to export animations as FBX files containing only the rig. That allows us add each animation as it's own lightweight file. In Unity we retarget the animations onto the humanoid avatar made from our character. This workflow allowed us to piece together all the parts separately as time went on.

I made the humanoid meta-rig in Blender as the starting point. This rig remained unchanged throughout the project and it needed to be compatible with Cascadeur's autophysics rig and Unity's Humanoid Avatar. The solution was to modify the rig in Blender to match the structure of the Unity Avatar. Cascadeur adds it's own simulated rig as another layer on top of the armature we import. When we export in Cascadeur, only the original armature and bone movements are included. Thus every part of process yeilds a compatible component.


Finally these components were all brought together in Unity, incorporated using Blend Trees, state machine logic, state machine behavior scripting, good old fashion math, and of course Animation Rigging (IK Rig).


Key Stats

239

Commits from Me

309

Total Commits

7

Team Members

Project Gallery

bottom of page