Try Activated instead of Touched.
Try this.
local Button = script.Parent
local function GuiOpener(hitPart)
local character = hitPart.Parent:FindFirstChild("Humanoid")
if character then
local player = game.Players:FindFirstChild(character.Name)
if player then
local plrgui = player.PlayerGui.ScreenGui.Frame.Visible = true
end
end
end
Button.Touched:Connect(GuiOpener)
Your script is affecting the GUI in StarterGUI, not the one on the player. You have to do game.Players:GetPlayerFromCharacter() to get the player, then go to their PlayerGui to change frame’s visibility.