Free Flow Combat System


A third person combat system allowing for smooth and fluid combat combos and movement. Attacks can be chained together across a group of enemies in a seamless manner.

 

Tools Used

  • Unity Engine
  • C#
  • DOTween *

Highlighted Skills

  • Game Mechanic Polish and Effects
  • Unity Engine Mastery
  • Complex Game Mechanics
  • Game AI

 

This project began as a proof of concept for a game asset, in this case, a free-flow combat system (similar to that of Batman: Arkham). I started the player's mechanics by creating a simple third person controller. From here, I created an input system where when the player attacks, their position is smoothly interpolated to an attack position. This works by taking the camera's angle and the input direction and multiplying it by some distance. I then created some static enemies and tested it out. This is how the early prototype turned out:


Obviously, this project needed some polish. To make attacks feel powerful, I created impact effects upon contact with the enemy. These effects include a shockwave, impact particles, impact sounds, and a small bit of screen shake. This still wasn't enough, as the enemies were still static. I created a system where the type of attack the player performed can be passed to the enemy script and play an appropriate reaction animation. With enemy reactions done, I spiced up the environment by adding a UFC arena. The final version looks and feels much better:


Learning Outcomes

I've been using the Unity Engine for a while now and sometimes feel like I've learned everything there is to know, however there is always more to learn! While creating this project, I've learned how important "game feel" and "game juicing" are. As shown by the initial prototype versus the final version, it almost feels like an entirely different game just by adding a few effects!

 

Challenges

One of the challenges I encountered while refining this project was ensuring smooth transitions between attacks to maintain the fluid feeling. Initially, some animations felt clunky or disconnected due to the timing mismatches and input buffering. To resolve this, I took a dive into the animator system and refined parameters like transition durations and interruption sources. While this challenge was more about iterative refinement than major roadblocks, it provided valuable insight into the importance of attention to detail in creating a polished gameplay experience.


Code for this project is included.