As part of building my game on Unity, I have been playing around with Scriptable Objects, which are a type of asset ideal for managing shared data between the components of your scene.
I have not formally introduced my game yet but the tl;dr is I am bringing mechanics from boardgames like Mage Knight and Gloomhaven and porting them to PC.
I use Scriptable Objects in the game for everything: Enemies, Player, Cards, Effects, Costs, Mana, Colors, etc. They are amazing data containers that can handily replace your enums by providing associated data for each of the values.
For example, instead of having an enum for the various magical elements of your game (lightning, fire, ice, etc.) then having switches everywhere on each value, you could group the common properties for each element (images, particle effects, sound effects) and behavior of that element - for example how it reacts against other elements (weaknesses/resistances) all in one container object.
Using carefully placed annotations in your Scriptable Object properties you can surface each of these values as configurable variables in the Unity Inspector, as well as integrate with the Unity menu to allow quick and easy creation and edition of all your game data. This also enables non-programmers to add content to the game.
The added bonus is that if you package your ScriptableObjects in bundles under the Unity Addressable Assets system you can turn those into downloadable content (DLCs) or enable modding of your game data for Steam Workshop. Imagine distributing new pack of cards, new enemies or new battle arenas.
I published a quick video (~15min) going through my use of ScriptableObjects to define the game cards and associated magic effects and do a short dive into the code to see how things are wired up. I will be publishing more on that topic as I find it fascinating and it is really helping me a lot as a game developer.
Have a look a don't hesitate to subscribe and comment it helps tremendously :)