::Yes, it is also possible to store the level ranges in ScriptableObjects. Whether you choose a ScriptableObject or a nested class depends on whether your level ranges are reusable. In a game like Pokemon for example, all the species belong to 6 types of level ranges, so if you have something similar, then using ScriptableObjects to represent the level ranges will be best, since then you can reuse these level ranges for different characters.
But if each of your characters has a unique level range, it may be more effective to make the level range a part of the class, then prefab the whole GameObject.
Hope this makes sense!
In Pokemon, different experience formulas are used for different groups of Pokemon with different growth rates. This can replace the Level Range that we use in the tutorial as well. Here is the experience system in Pokemon: https://bulbapedia.bulbagarden.net/wiki/Experience#Relation_to_level