Senior Project
For my year-long senior project, I decided to make a video game using Unity.
Creating the player
Movement
I already had a good idea of how I wanted the player to move - rotate towards the cursor, and move forwards when a button was pressed
When I first tried programming the movement, I did it by teleporting the player forwards slightly every frame while the button was held down, because at the time I didn't understand how Unity's physics engine worked. Evidently, this didn't work very well.

After I'd learned how to use the physics engine, I redid it and instead added force the the player object each frame the button was held down.

Player Sprites
I wanted to use pixel art for the entire game and keep the colour palette and sprites relatively simple

Initial placeholder

Version 1

Version 2
(current)
Weapons
The idea I had for weapons was one regular main weapon that the player could use indefinitely, and a secondary weapon that was more powerful but had some kind of limit for how much it could be used.
The system I settled on was that killing enemies would fill up a blue bar at the bottom of the screen, and once it was full the secondary weapon could be used.

With this system, the player would be punished if they used their secondary poorly, and rewarded for timing it well. They could even chain uses of the secondary together by killing enough enemies with each shot to refill the bar.
What did I learn?
I learnt the basics of Unity, how to use the physics engine, how to make movement feel good to play, some basic pixelart, furthered my programming skills and understood how a programming language changes in different contexts
Adding enemies
I originally wanted a large array of enemies but after working on the project for a while I realised it wouldn't be possible to do that in a way that I was happy with given the amount of time I had. I thought about games like Tetris and Minesweeper that were incredibly simple but that you could enjoy playing over and over again and decided I wanted to try to create something like that, simple but still fun. So I settled on three simple enemies, detailed below. I wanted them to synergise, complementing each other's abilities, making them much more difficult for the player to deal with if they let them build up. I think I did a good job of this, without making the game too difficult to be fun. I also decided to have all the enemies share the same colour scheme,one that contrasted the colours of the player, and used distinct shapes to differentiate the enemies.

Enemy One
The first enemy is very simple. It rotates towards the player, moves forwards, and does damage on contact. It has more health than the other enemies and mostly just serves as a shield. I used this very basic AI as the basis for the others.


Enemy Two
For this enemy I modified the AI to stop approaching once it is within a certain range, and fire a projectile at the player. It has low health and will back up if the player gets too close, letting other enemies distract them.


Enemy Three
The AI for the third enemy is similar to the previous one, but instead of firing a projectile, it charges up for a moment before slamming into the player. Its purpose is to get up close to the player, distracting them and knocking them around.

What did I learn?
I learnt how to make simple AI, how to make engaging and challenging combat, how to use prefabs and instances and how code should differ from code on regular game objects, and improved my time management and of course, my programming skills.
Building game mechanics
I originally had an idea for a more complex system for improving the player and progressing the game but, as I said earlier, I decided to make something simpler and instead settled on a simpler upgrade system. Enemies drop little white orbs when killed and when the player picks them up, they gain points, shown in the bottom right corner of the screen. The player can then spend the points improving different parts of their spaceship.

What did I learn?
The ultimate goal of the game is just to get the highest score possible (shown in the top left corner of the screen). I'd like to add some kind of online leaderboard at some point, but connecting your game to the internet is not easy and I have not had time to learn the necessary skills.

This system means the player gets more powerful as the game progresses, so to keep it balanced the spawn rate of enemies is gradually increased and the price of upgrades goes up with each purchase. Getting the prices and spawn rate balanced took a lot of testing and tweaking, but I think I've done a good job.
I learnt how to use Unity's UI system, how to balance a game, how to design an overarching goal and drive for a game, and now have a good grip on how to use Unity and have significantly improved my programmign skills.