When I first started working with Unity, I immediately began thinking about projects I could build to learn the engine. I’ve always loved DOOM, both old and new, so attempting a remake of the original DOOM felt like a natural choice. I quickly came up with many ideas for how to add all the ellements, but before I could do any of that, I needed assets.
I could have made my own assets, but my main goal with this project was to learn scripting and HUD development, not drawing. To solve this, I used Slade 3, an editor for the original DOOM engine, which allowed me to extract all the sprites and audio directly from the original game. With every sprite and sound effect imported into Unity, I could fully focus on implementation.
By the end of my second week experimenting with Unity, I had already implemented the pistol, shotgun, the HUD, and a generic enemy script. This enemy system allowed any enemy from the original game to perform running, attacking, and dying animations.
However, as the project grew, it became increasingly difficult to add or change features. I realized I was constantly thinking “Can I quickly add this cool thing?” instead of “How can I add this in a structured way that lets me keep building on it?”
Because of this, I decided to restart the project from scratch, this time with a clear plan and better structure in mind.
With this new approach, I quickly rebuilt the HUD, making sure all values updated correctly. Weapon and keycard icons light up when collected, and DOOM guy's face gets bloodier with lower health, becoming bloodier as health decreases. Handling numeric values such as health turned out to be more intresting than expected, since I only had sprite images for numbers. To solve this, I stored the number sprites (0–9) in an array and converted the health value into three separate indices, which determined which sprite to display for each digit.
I also spent more time thinking about how to implement the guns, ensuring that all weapons could be created using shared base logic. This allowed me to eventually implement all the guns from the original game. I did a lot of research into how DOOM’s weapons and HUD worked so I could recreate them as closely as possible, both in logic and animation. This time around, I used coroutines and state-based logic, which made animating the weapons much easier. All weapons are rendered as sprites on the canvas, which worked well but sometimes required careful alignment to make them look right.
To finish off the weapons, I added particles and effects: bullet-based weapons leave blood splats where they hit enemies, and projectile weapons create the appropriate explosion effects on impact.
For enemies, I implemented a Baron of Hell as a test target for the weapons. The enemy runs in place while the player can walk around it. As the player moves, the enemy changes sprites to show its sides and back, even though it is technically just a single plane billboarded toward the camera. At this stage, the enemy sadly does not attack, walk, or die.
Although I had many more plans for this project, I had to move on due to time constraints. I’m really happy I chose to make this. It significantly sped up my learning process in Unity and gave me a much stronger foundation, which helped me create better and larger projects afterward.
Although I had many more plans for this project, I had to move on due to time constraints. I’m really happy I chose to make this. It significantly sped up my learning process in Unity and gave me a much stronger foundation, which helped me create better and larger projects afterward.
Controls:
LMB : Shoot
WASD : Move
1–7 : Select weapon
Scroll wheel : Change health
– / + : Adjust volume