Checking input with the Input
singleton and using the _input
method are two very different ways of handing input.
The Input
singleton checks realtime input states, even though it has some event-like methods. It means no matter what happens in the game or the engine, it will tell you the current input. That also means it doesn't check anything like pause mode, GUI in front of the player or text fields being in use etc, those cases are up to you to manage manually.
The _input
method (and its _unhandled_input
and _gui_input
counterparts) go the other way around: they gets called only when input changes (or events) actually occur, so it doesn't run every frame, only when it needs to. Because of that, it is often preferred when GUI interaction comes in, because the engine can decide when your code gets called (i.e if a window blocks the mouse, it will send clicks to the script on that window, and not the game behind it).
All this design didn't change much in 3.0, check this http://docs.godotengine.org/en/3.1/tutorials/inputs/inputevent.html