To get a player instance it's common to use :GetPlayerFromCharacter(character) but is there another way of getting it without the player touching an object?
Yes. It is possible. For the GUI, the GUI's parent is the player's PlayerGui and you can use this for example. However, there's much more way to do this and not only for GUI. Hope this helped!
local player = script.Parent.Parent -- This will get a player. -- The code
You can just do like:
local PlayerName = "_____" --Name of the player you want to get game.Players:FindFirstChild(PlayerName) --It really works this way, trust me