
Project Goals
-
Add movement for all moving objects
-
Create a projectile that destroys asteroids
-
Create a spawner object
-
Setup a wave structure
-
Spawn waves of enemies
-
Track the number of enemies in the waves
-
Add a score to the player
-
Increase the score based on the size of asteroid shot
-
Track player lives
-
Fill out the game mode to transition from the main menu to the game
-
Pause the game
-
Reset the game
-
Create a HUD
What Went Right
Round Start Fiasco
During play tests, I noticed that rounds were starting before all asteroids of a wave were destroyed. I played around with the branch statement that checked for the asteroid count, swapping it between checking if the count was less than or equal to zero and equal to zero, but I kept running into the same issue. I figured it might've been an issue with changing the static mesh of the asteroid, as I hadn't experienced it prior to the change, but after resetting the mesh rounds continued to start prematurely. I decided to implement a delay before the check and the problem was solved.
.png)
Making it my Own
_edited.jpg)
_edited.jpg)
Customization was not a goal in this project, but I wanted to make it my own as much as I could. Initially, I had the idea to change the static mesh of the asteroids since magenta spheres didn't feel quite space debris to me. I migrated a rock mesh from a separate project and adjusted the collision sphere, then changed the material to a ground texture migrated from another project. Additionally, as the player shoots the larger asteroids they break into medium and finally small sized asteroids. These smaller asteroids didn't share the same static mesh as their large counterpart and instead led to more interesting shapes and gave the impression that they had broken from larger masses. The spaceship was a simple cone shape at the beginning, and I wasn't sure what to replace it with. I chose a shrine static mesh and added a rotating movement component; it was small enough that details like the roof tiles and wood supports weren't discernable.
Explosions...in Space?!
In the base project, when the player's ship collides with an asteroid they are reset to the starting position and blink for a couple seconds indicating invulnerability before being able to move again. With the changes to the static meshes of both the asteroids and the spaceship, I felt it only fitting to customize this as well. With my changes, when the player is hit by an asteroid an emitter spawns and plays an explosion. I didn't have an explosion sound to go with the particle emitter, so I took the first-person weapon fire sound from Unreal's first-person shooter starter project and pitched it down and halved the volume. The result was a mechanical like explosion sound that fit rather well into the project.
.png)
What Went Wrong
Reset...
_edited.jpg)
After I had packaged the final build of the game, I asked my wife to play the project, she's my official play tester and creative consultant, but I didn't expect her to reset. When she pulled up the pause menu and hit "Restart Game" the wave count reset to one, her score reverted back to zero, she regained her lives, and she was left floating in the vast emptiness of space. While I had changed things to make the game unique, I had failed to implement the restart game feature. I explained that I must've missed creating and implementing the function, but the embarrassment had already set in.
Space is on Fire
I wanted to add a flame effect behind the spaceship while it was moving. After all, flames make everything faster. Unfortunately, when the player would move their spaceship around the screen, the particle emitter would leave a constant trail of the player's path and then gradually increase in size until it became impossible to see anything. I tried implementing statements that checked if the player was moving as a means of activating and deactivating the emitter, but ultimately ended up scrapping the idea to meet the deadline.
.png)
A Deadly Death
.png)
Before I chose the death explosion that made it into the final product, I wanted an explosion that felt more sci-fi. I played around with a few that produced different patterns and colors, but upon activation the particle effect was so small that it appeared more as a dot. I adjusted the z-vector to move the effect closer to the camera and managed to make the effect more visible, but then I noticed the emitter would spawn and then never deactivate. This resulted in quasars spawning where the player died, growing in size and then persisting even when the player lost all their lives and restarted the game. My initial thought was to place a delay before deactivating them, but I couldn't get the effects to dissipate. I chose to can the idea and select a particle effect that had a limited life span and appeared more as a generic explosion.
Conclusion
I had a lot of fun creating a top-down shooter, especially one that emulated an arcade classic Asteroids. I liked having the freedom to add my own creativity to this project, the changes made the asteroids feel like actual asteroids being destroyed and adding something as simple as a rotating movement component made the spaceship more interesting. I missed a key feature that overall hurt the project and would have been a critical issue if released to an audience, this highlighted my need to focus on core mechanics before worrying about beautification.
Project Photos

Shrine static mesh, with a custom material that flashes when the player respawns.

Rock static mesh, with a ground material laid on top. Upon being destroyed, breaks into a smaller sized asteroid with a different shape. Each asteroid rotates at a random speed, making them feel more unique.

When the player would press "Restart Game" from the pause menu, the player would be floating alone in space with no asteroids spawning in.

Shrine static mesh, with a custom material that flashes when the player respawns.