I would say that it is the other way around, there is more controversy about global state aka variables than having only a single instance of a class. On one hand using only a single instance of some class is a very common thing(webserver session data, thread pools …). On the other having something mutable in global space(accessible from everywhere) is frowned upon.
So why shouldn’t one just put stuff in the global space, it makes stuff so much easier right?
The thing is that global state is bad in many ways. Everywhere you use it in your code you get a hidden dependency to it. This will make debugging harder, can produce some nasty bugs(hard to find) and make it harder to split your app into modular parts.
The thing is with using global state, that it doesn’t scale. If you really only plan to have only 1 or 2 global variables in a little app, it might be justifiable. On the other hand if your app is growing and your use of global state is growing also, at some point you will loose the oversight on things and adding or changing little things will get extremely difficult.
Which brings us back to the famous Singleton pattern, which should really be called Globalton pattern. This is because implementations use a global object to provide a single instance, which can have the same problems as above.
As a final note, don’t do anything complicated stuff like your constructor thing or that getInstance method with null check. Just create your simple class which should be a Singleton any then create a final static instance of it somewhere else(NOT in the same class). This somewhere else could be the place where you store other constants for your game.