Firstly I used my knowledge from setting up the camera system to set up a spline and movement system for the enemies
I Then created a parent blueprint with stats that I could change for each enemy and also make them move along the spline

Currently the deletion at the end doesn’t function but it is not as if I have the damge dealing system ready anyways.
To spawn them in sections I initially created this:

Which results in a manually entered sectioning of:

(I am using place holders since I don’t feel like modeling and learning to animate currently)
I researched how to format my waves easier and luckily found out about data table from Unreal Dev Hub (2024). Learn How to Use DATA TABLES in BLUEPRINT to Set Actor Values in UE5. [online] YouTube. Available at: https://www.youtube.com/watch?v=L1hz3tqg5QQ [Accessed 15 Apr. 2026].
This may not be the most effiecient way but it works

I need to add a timer/ When the enemies are killed, cooldown to the waves spawns. Since they currently spawn 5 seconds after the other one, with no time to place towers or take a breather. (Replaced by the start wave button)
I used this video by Gorka Games (2023) To help me create the health bar above the enemies heads. How to Make a 3D Health Bar for your Enemy in Unreal Engine 5. [online] www.youtube.com. Available at: https://www.youtube.com/watch?v=PiPq3q1CXyM [Accessed 15 Apr. 2026].

Some of the health bar code and detecting when the enemy is dead and deleting it

In a Later blog I need to correctly setup the deletion when they reach the end (which I noted earlier wasn’t working) and also damaging the village untill the loss screen.
I Learnt the basics of damage numbers from Pitchfork Academy (2024). How To Set Up A Floating Damage Indicator – Unreal Engine 5 Tutorial. [online] Youtu.be. Available at: https://youtu.be/qBDnJTb9Clo?si=FFQbJKS5kVnDflXP [Accessed 16 Apr. 2026].
However the Setup was for a first person shooter so the damage number animation calculation was based of the cameras centre up and right vectors.
I rewrote it to work entirely off of the enemies world location with added random variation in any axis besides up. Which has the esact effect I was going for, more than what the video was.
In my existing (old) attack code which has a reference to the enemy and can apply damage, I added the spawn of the Damage number before it applies damage to the enemy.

The actor spawned is this widget that has a Opacity and scale animation where it grows, and becomes opaque then shrinks and becomes transparent. This is basically the same as the video, besides I used a scale box instead of a canvas panel. Why? The canvas panel is like a panel of the screen and therefore the text was like offset on a plane. The scale box is just a fixed box meaning the widget spawns esactly where the world location was. Maybe I could have used something else but this works.

To set the damage number (from video) I used this.

I created a function in the enemy to send its location so I can spawn the widget on it. (Replaced with unit stat collection function from unit blog)

Then to run the setting of the damage number and also create the random jumping movement of the damage numbers I wrote this (which is majorly from the video besides the randomisation with world location instead of camera).

The animation basically just gets its own world location and picks a end point upwards in the z direction and in any forward/backwars/Left/Right location, which adds randomness.
Right now I have the timeline set to ease in and out of these two positions so it slows in the middle.
All of these randomised settings and also the font and colouring may be changed in the future like with a critical hit or colour based on the element of the damage, but right now it looks like this:
The start button functions with:

And on the bottom of the wave progressor code earlier in this blog I added to properly show the button when either the timeout of 120 second after the last enemy spawns or all enemies are killed.

In later blogs I would like to add models and and animation to the enemies but other than that they are pretty much fully functional and customisable with my wave structure table and parent enemy blueprint. So I may not create another enemy blog.
Leave a Reply