So I have a StarterGui named Menu consisting of multiple frames and one TextButton :
Abilities, Inventory, Players, TabFrame, TravelFrame, TextButton.
Inside TabFrame: - UIListLayout set to Horizontal Layout - 4 Buttons Named: AbilitiesTab, PlayersTab, InventoryTab, TravelTab - LocalScript that contains the code at the end of this question.
The other frames inside the starterGui Menu contain nothing and are just frames with exactly the same positioning and size.
Tab Frame allows the user to click on one of the tabs, and switch to the inventory frame, abilities frame, travel frame, or players frame.
Tab Frame will always be visible but the other frames switch between what is selected.
So If I were to click the TravelTab it would switch from the starting Frame "Inventory" to the Travel Frame and make Inventory.Visible = false and TravelFrame.Visible = true.
Yes I probably should make them all Have frame at the end or not at all lol.
However for some reason the frames do not change in visibility. The buttons work correctly and change background color, text color exactly the way they should. But when trying to make the frames visible or not visible, something breaks in the code.
Here is the code! Thank you!
local TravelFrame = game.StarterGui.Menu.TravelFrame local Inventory = game.StarterGui.Menu.Inventory local Abilities = game.StarterGui.Menu.Abilities local Players = game.StarterGui.Menu.Players local TravelTabButton = script.Parent.TravelTab local InventoryButton = script.Parent.InventoryTab local AbilitiesButton = script.Parent.AbilitiesTab local PlayersButton = script.Parent.PlayersTab local ActiveTab = Instance.new("Frame") local ActiveTabButton = Instance.new("TextButton") ActiveTabButton = InventoryButton ActiveTab = Inventory script.Parent.TravelTab.MouseButton1Click:connect(function() -- Sets The last active tab to default non active color (White) ActiveTabButton.BackgroundColor3 = Color3.new(255, 255, 255) ActiveTabButton.TextColor3 = Color3.new(0 , 0, 0) -- Once last active tab colors are set, Sets ActiveTabButton to new active Tab and sets colors to black (Active) ActiveTabButton = TravelTabButton ActiveTabButton.BackgroundColor3 = Color3.new(0, 0, 0) ActiveTabButton.TextColor3 = Color3.new(255, 255, 255) -- Sets Last Active Page/Frame to invisible and switches ActiveTab to new active page. ActiveTab.Visible = false ActiveTab = TravelFrame ActiveTab.Visible = true end) script.Parent.InventoryTab.MouseButton1Click:connect(function() -- Sets The last active tab to default non active color (White) ActiveTabButton.BackgroundColor3 = Color3.new(255, 255, 255) ActiveTabButton.TextColor3 = Color3.new(0 , 0, 0) -- Once last active tab colors are set, Sets ActiveTabButton to new active Tab and sets colors to black (Active) ActiveTabButton = InventoryButton ActiveTabButton.BackgroundColor3 = Color3.new(0, 0, 0) ActiveTabButton.TextColor3 = Color3.new(255, 255, 255) -- Sets Last Active Tab to invisible and switches ActiveTab to new active page. ActiveTab.Visible = false ActiveTab = Inventory ActiveTab.Visible = true end) script.Parent.PlayersTab.MouseButton1Click:connect(function() -- Sets The last active tab to default non active color (White) ActiveTabButton.BackgroundColor3 = Color3.new(255, 255, 255) ActiveTabButton.TextColor3 = Color3.new(0 , 0, 0) -- Once last active tab colors are set, Sets ActiveTabButton to new active Tab and sets colors to black (Active) ActiveTabButton = PlayersButton ActiveTabButton.BackgroundColor3 = Color3.new(0, 0, 0) ActiveTabButton.TextColor3 = Color3.new(255, 255, 255) -- Sets Last Active Tab to invisible and switches ActiveTab to new active page. ActiveTab.Visible = false ActiveTab = Inventory ActiveTab.Visible = true end) script.Parent.AbilitiesTab.MouseButton1Click:connect(function() -- Sets The last active tab to default non active color (White) ActiveTabButton.BackgroundColor3 = Color3.new(255, 255, 255) ActiveTabButton.TextColor3 = Color3.new(0 , 0, 0) -- Once last active tab colors are set, Sets ActiveTabButton to new active Tab and sets colors to black (Active) ActiveTabButton = AbilitiesButton ActiveTabButton.BackgroundColor3 = Color3.new(0, 0, 0) ActiveTabButton.TextColor3 = Color3.new(255, 255, 255) -- Sets Last Active Tab to invisible and switches ActiveTab to new active page. ActiveTab.Visible = false ActiveTab = Inventory ActiveTab.Visible = true end)
I also tried to just open a frame without the complex code and with a simple TextButton. I put the local script in the textbutton and
script.Parent.MouseButton1Click:connect(function() -- Just an example. This did not work either. someFrame.Visible = true textButton.Visible = false end)
Figured I would put the answer here for all to see, instead of in the comments. You put StarterGui instead of PlayerGui.
Pretty much what happens when you have Gui stuff in the StarterGui is that at the start of the game, the stuff is cloned into the players PlayerGui. So when trying to change Guis for the player always use game.Players.LocalPlayer.Playergui or player.PlayerGui depending on if you set player to the right path.