top of page

Crystal Shooter

Date:

February - March 2024

Genre:

First-person arcade shooter

Role:

Technical Designer

Engine:

Unreal Engine 5.3.2

Description of the project:​

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.

I was responsible for:
  • 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 the first time I had ever created AI enemies in Unreal Engine 5 so I had to use the resources available to me. This started with doing a fair bit of research on an efficient way to create easily scalable AI so more enemy types can be added on later if we wanted. 

​

The first enemy that we wanted to have in our game was a basic Melee Enemy that would chase the player, this also happened to be a great base to make the other enemies that we planned on having.

​

I was able to find a model that fit our needs from Sketchfab and some bipedal animations off of Mixamo. Unreal 5.4 added a feature that is able to automatically retarget bipedal animations to different skeletal meshes. When the project was created Unreal 5.3 was the newest version, so I had to do all the animation retargeting manually using UE IK Rigs and IK Retargeting for all the enemies in the prototype.

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. Here the melee enemy has 100 health, so damage is dealt accordingly.

Creating A Ranged Enemy

The second enemy that we wanted to make was the Ranged Enemy. The thing is, I have never made a ranged enemy before, so I had to do a lot of research. The main issue was what I wanted the Ranged Enemy to shoot, and with the fast paced nature of our game, a fast moving projectile seemed to be a better fit over an instant hit scan attack.

​

The first iteration of the Ranged Enemy was just used to test out positioning and testing the ranged attack. Here the enemy uses an Environment Query System (EQS) that originates at the player so there is a set radius that the enemy stays within to attack the player. After each attack the enemy moves to a different position that is picked from the top 25% best choices for line of sight and distance.

​

The final iteration of Ranged Enemy has improved animations and I added the projectile (that I also created) to the attack. The projectile has homing enabled on it that I tweaked to make it a little harder to dodge, but it can be disabled through a simple Boolean check box. The projectile homes in on the player until it either collides with the player causing damage or hitting the environment destroying itself.

Small Melee Enemy

The 3rd and last enemy to be created was the small and fast melee quadruped. With the functionality being the same as the base Melee Enemy, the difference with the Small Melee Enemies is that they are smaller and faster but they do less damage and have less health. 

​

Their purpose is to be a pest enemy that rushes the character very quickly and forces the player to deal with them.

 

The model thankfully came with animations that I split up into animation clips and montages that I could easily slot into the already existing animations, since I made them variables and as a result they can be different in a childed blueprint, which the Small Melee Enemies are.

bottom of page