top of page

Crystal Shooter

Role:

Technical Designer

Date:

February - March 2024

Engine:

Unreal Engine 5.3.2

Genre:

First-person arcade shooter

Description:​

A prototype made in a group of 10 with the project being most of our teammates first time working in Unreal Engine. A PVE first-person shooter against waves of enemies in an arena environment with a focus on different elemental attacks and enemies.

My Contributions:
  • Creating 3 unique enemy AIs with different behaviors and abilities.

  • Responsible for enemy AI creation and behavior utilizing UE Blueprints, Behavior Trees, Blackboards, and EQS System allowing for easily iterable AI enemies.

  • Implementing enemy AI meshes, animations, and sounds using UE IK Rigs, IK Retargeting, and Animation Montages.

Gameplay

Creating A Base Melee Enemy

This was my first experience creating AI enemies in Unreal Engine 5, so I researched efficient methods for scalable AI to allow for future enemy types.

 

We started with a basic Melee Enemy that chases the player, serving as a foundation for other planned enemies.

I found a suitable model on Sketchfab and bipedal animations on Mixamo.

 

While UE 5.4 introduced automatic retargeting for animations, I had to manually retarget them using UE IK Rigs and IK Retargeting in the earlier version, UE 5.3.

Enemy Health & Damage System

Now that we have a basic enemy, it needs to be able to take damage. To do that I created a health and damage system that includes: 

   - Health 

   - Damage

   - Damage types

   - Death

   - Health bar​

In hindsight, the damage system that is applied to the enemies should have been on the projectiles that the player could shoot. Unfortunately we had very short period of time, so we decided to use the temporary system I had created.​

The two events are both hit detection events that check when a collider is hit to determine the damage that is applied to the enemy. When the enemy is hit, it detects which projectile hit the collider, and then applies damage accordingly to the damage system for the enemies. 

Creating A Ranged Enemy

We aimed to create a Ranged Enemy, but since I had no prior experience, I needed to research extensively. The key challenge was deciding what the enemy would shoot; given our game's fast pace, a fast-moving projectile was more suitable than an instant hit scan attack.

The initial version of the Ranged Enemy tested positioning and ranged attacks using an Environment Query System (EQS) centered on the player. The enemy remains within a set radius to attack and moves to a new position after each attack, selected from the top 25% of optimal choices for line of sight and distance.

The final version of the Ranged Enemy features enhanced animations and a newly created projectile with homing capabilities. I adjusted the homing to make it harder to dodge, but it can be easily disabled. The projectile targets the player until it either hits them, causing damage, or collides with the environment, destroying itself.

Small Melee Enemy

The final enemy created is a small, fast melee quadruped. While it shares functionality with the base Melee Enemy, it is quicker and smaller but deals less damage and has lower health. Its role is to quickly rush the character, forcing the player to respond. The model included animations that I organized into animation clips and montages, allowing easy integration into existing animations as variables in the Small Melee Enemies' blueprint.

If I had some more time with this project, I would have wanted to work on the Small Melee Enemy a bit more. They were a copy past of the regular melee enemy with a faster movement and attack speed, but there was nothing that made them special. I had thought about adding a slowing effect for when the player gets hit by them, but the scope of the prototype was limited and we just didn't have the time.

bottom of page