I created a fully functioning GUI starter Menu that works PERFECTLY in studio but as soon as I boot up my project as a real game it doesn't work, can someone help if you can?
Player = game.Players.LocalPlayer Menu = script.Parent Play = Menu.Play About = Menu.About HasPressedPlay = false Info = script.Parent.Info Minimize = Info.Minimize function MouseEnterPlayButton() Play.FontSize = "Size36" Play.Size = UDim2.new(0.45, 0, 0.160, 0) end function MouseLeftPlayButton() --166, 166, 166 Play.FontSize = "Size24" Play.Size = UDim2.new(0.3, 0, 0.15, 0) end function MouseEnterAboutButton() About.FontSize = "Size36" About.Size = UDim2.new(0.45, 0, 0.160, 0) end function MouseLeftAboutButton() --166, 166, 166 About.FontSize = "Size24" About.Size = UDim2.new(0.3, 0, 0.15, 0) end function PlayGame() if HasPressedPlay == false then for GuiMove = 1, 30 do if GuiMove <= 30 then Play.Position = Play.Position +UDim2.new(0.06, 0, 0, 0) end if GuiMove <= 20 then About.Position = About.Position +UDim2.new(0.05, 0, 0, 0) end wait() end Menu:remove() end end function MinimizeInfo() Info.Visible = false end function InfoPopup() if Info.Visible == false then Info.Visible = true else Info.Visible = false end end About.MouseButton1Down:connect(InfoPopup) Minimize.MouseButton1Down:connect(MinimizeInfo) Play.MouseLeave:connect(MouseLeftPlayButton) Play.MouseEnter:connect(MouseEnterPlayButton) About.MouseLeave:connect(MouseLeftAboutButton) About.MouseEnter:connect(MouseEnterAboutButton) Play.MouseButton1Down:connect(PlayGame)
You need to use WaitForChild.
When starting up a game on a server, things load at different time. Sometimes a script loads before the things the script is trying to access. Meaning you have to wait for the things to exist. To do this, all you have to do is use WaitForChild
. You don't, however, need to use WaitForChild
when accessing the parent of the script. This is because the parent loads before the children. Here's what your script would look like after making the changes,
--in local script Player = game.Players.LocalPlayer Menu = script.Parent Play = Menu:WaitForChild("Play") About = Menu:WaitForChild("About") HasPressedPlay = false Info = script.Parent:WaitForChild("Info") Minimize = Info:WaitForChild("Minimize") function MouseEnterPlayButton() Play.FontSize = "Size36" Play.Size = UDim2.new(0.45, 0, 0.160, 0) end function MouseLeftPlayButton() --166, 166, 166 Play.FontSize = "Size24" Play.Size = UDim2.new(0.3, 0, 0.15, 0) end function MouseEnterAboutButton() About.FontSize = "Size36" About.Size = UDim2.new(0.45, 0, 0.160, 0) end function MouseLeftAboutButton() --166, 166, 166 About.FontSize = "Size24" About.Size = UDim2.new(0.3, 0, 0.15, 0) end function PlayGame() if HasPressedPlay == false then for GuiMove = 1, 30 do if GuiMove <= 30 then Play.Position = Play.Position +UDim2.new(0.06, 0, 0, 0) end if GuiMove <= 20 then About.Position = About.Position +UDim2.new(0.05, 0, 0, 0) end wait() end Menu:remove() end end function MinimizeInfo() Info.Visible = false end function InfoPopup() if Info.Visible == false then Info.Visible = true else Info.Visible = false end end About.MouseButton1Down:connect(InfoPopup) Minimize.MouseButton1Down:connect(MinimizeInfo) Play.MouseLeave:connect(MouseLeftPlayButton) Play.MouseEnter:connect(MouseEnterPlayButton) About.MouseLeave:connect(MouseLeftAboutButton) About.MouseEnter:connect(MouseEnterAboutButton) Play.MouseButton1Down:connect(PlayGame)
That looked to be the only problem. That should work. Good Luck!