Data Architekture - Skill Upgrade System

Hi I have design questin for my data and upgrade system.
For my Init values Player and Enemys I use Scriptable Obejcts but I cant change this values so I want to use it for initialising.
Also I thougt about a GameDataManager which handles things like update hp if its skilled or update EnemyPower if a level is done. Also I thought about a dataset class for Playerdata, Enemydata etc. to store the current values in a JSON File to save Progress.
Should i do for every Enemy a separate DataClass or where I should store the current Values.
I think this is a topic about data and behaviour separation and I really unsure how to do this.
I dont know is this shitty or good what iam doing so does maybe someone have a hint or a good article, tut etc. how to design this. Its more about the concept not the details of code.

Allow me impart of what I was always told was the golden rule of the games industry and I do believe to be true. If its not broke, don’t fix it.

Overthinking your setup is going to cost you time and frankly aint as fun :stuck_out_tongue: I would recommend just having a stab at it and seeing what happens, if you gotta change it, you gotta change it.

If you want to work with ScriptableObjects then you should make custom editors for them, which i do recommend since editors are great, they save a lot of time and hassle once you get used to writing them.

A manager sounds sensible, I typically make a manager class, then an editor for the manager. It then exposes variables for everything it manages. I also typically don’t bother with scriptable object but it does have its good uses.

Anyway as an example my main project is a voxel/minecraft engine. One of my classes is a block manager which holds an array of all blocks which are just a serialisable script and essentially saved in the scene file/prefabs. That manager then lets me edit every block and lets me create/delete new ones so all the data is in one place and easily managed.