How do I make Gui's appear for only the player?

You need some knowledge and basic understanding in how client-server architecture works.
But basically the answer to your question is simple.
You need to use a localscript for this.
Localscript is a script that runs only for the player
ServerScript (Normal script) is a script that is only being ran on the server side.
In order to achieve what you want, you need to make the gui visible on the client.
local gui = game:GetService("Players").LocalPlayer.PlayerGui.Gui gui.Enabled = true -- will only be enabled for the current player.
If you’d like to make it visible for a specific player from the server, you will need remote events.
Remote events are just like some bridges that are used to establish a safe connection between the server and client and vice-versa.
You need to create a remote, and fire it from the server.
Server side code:
local remote = game:GetService("ReplicatedStorage").RemoteEvent -- storing the remote event. remote:FireClient(AnyPlayer) -- AnyPlayer stands for the player you want to receive the signal. -- Remember that this is done on the server side
Client side code :
local remote = game:GetService("ReplicatedStorage").RemoteEvent -- storing the remote event local player= game:GetService("Players").LocalPlayer -- storing the player in the variable remote.OnClientEvent:Connect(function() -- we use OnClientEvent to receive the signal from the server. player.PlayerGui.Gui.Enabled = true -- Enabling the gui for him. end)
and this is how you enable a gui on a certain client.