The player can win the game without an upgrade, but it will be easier by getting some. I created the upgrade system and divided it in 3 categories; Gun, Grenade and Health.
This system is built as a Node Tree. Each Node (represented as an upgrade) has variables to determine its type. I wanted an easy way to change data for each upgrade object; these are the data we could easily change in the inspector.
The color changes if the player has bought the upgrade.
An UI element to tell where the price sign should be.
The cost of the upgrade.
An enum with all types of upgrades the player can buy.
The children the node has, to make sure the player upgrade a category in the right order (from top to bottom).
Each upgrade is connected to a text-description, so the player gets an understanding what each upgrade does.