Singletons are often considered bad practice, but if it solves the problem then it’s ok to use them as long as the rest of your code doesn’t become overly dependent on it.
The main issue with singletons is that they are extremely useful, beginner programmers overuse them ending up with 20 managers and a huge spaghetti that is nearly impossible to debug. To avoid this keep the SOLID principles in mind and you’ll be ok.
If you don’t want to “manually” save and load the data I don’t recommend using Scriptable Objects. I always thought they were persistent, but they aren’t, if you change them during run time there’s a chance that data won’t persist once you load a new scene which is annoying. I’m not 100% if that is a Unity bug or something they changed in newer versions, because I remember them being persistent, but a few months ago, with Unity 2021.3.11f1, I came across that annoyance.
You can have a full loading and saving system with a singleton, so don’t worry too much about that, you’ll just have to be really mindful as to when the game saves and loads, and also make it really clear to the player.