Technical Implentation
- Game prototyping using Unreal Engine and C++
- VFX and Shaders made from scratch for aesthetic
- Enhanced Input system for fluid controls on gamepad and mouse/keyboard
- Combat system with free motion and countering
- Combo system connected to UI/UX
- AI behavior tree and task handling, along with overarching Enemy Manager
What I learned
- Deepened my understanding of Unreal Engine and C++
- Impoved my ability to optimize gameplay systems for a specific goal
- Learned how to make a fluid character controller with multiple control mapping types
- Gained more experience with AI controllers and managing AI systems
- Extra shader work to utilize Blueprint and C++ to achieve wanted aesthetics
- Enhanced my knowledge of 3D math and directional influnce in systems
- Strengthened working skill in better stregthening goal oriented projects and useful experience in different gameplay types
Overview
This prototype quickly became one of my favorite projects. I started by building a smooth and responsive character controller using Unreal Engine's Enhanced Input system, allowing seamless support for both controllers and mouse and keyboard setups.
From there, I focused on developing a dynamic combat system that combines free motion and root motion animations, paired with a custom combo counter actor component using timers to create fluid and entisting combat. To enhance the impact of each hit,
I added camera shake, visual effects, and custom shaders to give the world a unique, simulated "computer matrix" aesthetic.
Starting with the input I was able to make a fluid character controller mapped to the Enhanced Input to be setup to handle input with a controller or a mouse and keyboard.
Getting to the meatier parts of this project, taking a lot of influence from the Batman Arkham games, I wanted to make a combat system that uses free motion with root motion animations. To be able to get the correct target
to send to the free motion animation notify state, I used a sphere check to find all the enemies then math that combined the players forward vector, camera forward and last movement input using a dot product to find the correct
enemy to pounce based off input and direction. Using this same system I was also able to set up counter attacks but figuiring out which animation to play was the trickier part at fist and required some fine tuning. With the combination of a map in the
player script to key the correct coounter animation, but also using delegates to allow the correct animation to play in the enemy script as well. Pairing these I was able to warp both the player and enemy to eachother ensuring they are facing and playing at the same time.
Lastly I took a crack at AI development in this prototype, which I rarley get to do with many of my projects and really enjoyed it. Unreal has a useful behavior tree system, with this I made task nodes to circle the player + strafe, check token, and also
to acheieve the attack. The circle task will make a radius using the player as the middle to help aid the enemy in where to strafe along that path, next would be the check token which takes use with the enemy manager I made. This component is on a basic actor
which will grab all the enemies in the radius set and start the process of finding an enemy to give a token to. This token will be checked in the task to allow the attack node to be acheieved, this allows the player to have a little breathing room on who is attacking
the player making a more real combat enviorment to react to. To allow the countering to be played with the player, I made my own animation notify state that made a window of time enabling a reaction prompt for the player to react and counter not getting hit.