Static variables are essentially global variables that any class can access (if it’s public). Use these sparingly in cases where you need to have a shared variable between various objects. When you create a class with variables, each object has its own unique values. So a car made from the same vehicle class could have 5 different variations due to the changes in variable values. Static variables stay the same as it’s part of the class and not the instance of the object created.
There are a few things you can do, but it depends how complex you want to get. You could just use public variables and have only those families access them as needed. That’s the easiest but also not the most secure.
The next step would be to create specific classes for these families. For example you could create a base “dog” class, and any subsequent families that would fit within this criteria would derive from the dog parent class.
Variables within those classes would be accessible to classes but not others. You can of course make public variables within them to make them available to outside classes, but that’s a general idea. It’s a bit more complex doing that, but can usually mean closer integration and possibly more efficient coding. Here is a brief explanation of how inheritance works: https://unity3d.com/learn/tutorials/topics/scripting/inheritance