← 全部教程
菜单
如何制作 Roblox 主菜单 GUI
主菜单是玩家加入你游戏后看到的第一样东西。本指南用 Luau 从零搭一个 —— 一个 ScreenGui 容器、一个居中面板、一个标题,以及用 UIListLayout 自动堆叠的 Play / Settings 按钮。你也可以从编辑器里现成的主菜单模板开始再自定义。
打开主菜单 模板 →1. 创建 ScreenGui 容器
每个屏幕界面都装在一个 ScreenGui 里。把它放进本地玩家的 PlayerGui 让它渲染在他的屏幕上,并把 ResetOnSpawn 设为 false,让菜单在重生后依然存在。
local player = game:GetService("Players").LocalPlayer
local gui = Instance.new("ScreenGui")
gui.Name = "MainMenu"
gui.ResetOnSpawn = false
gui.IgnoreGuiInset = true
gui.Parent = player:WaitForChild("PlayerGui")2. 加一个居中面板和标题
一个 Frame 当菜单背景,UICorner 给它圆角,一个 TextLabel 显示游戏标题。AnchorPoint 0.5,0.5 加 Position 0.5,0.5 让面板正好居中在屏幕上。
local panel = Instance.new("Frame")
panel.Size = UDim2.fromScale(0.4, 0.6)
panel.Position = UDim2.fromScale(0.5, 0.5)
panel.AnchorPoint = Vector2.new(0.5, 0.5)
panel.BackgroundColor3 = Color3.fromRGB(21, 23, 31)
panel.Parent = gui
local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 18)
corner.Parent = panel
local title = Instance.new("TextLabel")
title.Size = UDim2.fromScale(1, 0.18)
title.BackgroundTransparency = 1
title.Text = "GAME TITLE"
title.Font = Enum.Font.GothamBlack
title.TextSize = 30
title.TextColor3 = Color3.fromRGB(153, 203, 255)
title.Parent = panel3. 用 UIListLayout 堆叠按钮
往面板里放一个 UIListLayout,之后你加的每个子元素都会自动堆叠 —— 无需手动定位。设 Padding 控制间距,HorizontalAlignment 居中它们。
local layout = Instance.new("UIListLayout")
layout.Padding = UDim.new(0, 10)
layout.HorizontalAlignment = Enum.HorizontalAlignment.Center
layout.Parent = panel4. 让按钮做点事
每个按钮是一个 TextButton。连接 MouseButton1Click,在玩家点击时执行代码 —— 这里 PLAY 会隐藏菜单并开始游戏。
local playBtn = Instance.new("TextButton")
playBtn.Size = UDim2.fromScale(1, 0.14)
playBtn.Text = "PLAY"
playBtn.Font = Enum.Font.GothamBold
playBtn.TextSize = 20
playBtn.Parent = panel
playBtn.MouseButton1Click:Connect(function()
gui.Enabled = false
-- start the game here
end)提示: 用 gui.Enabled = false 隐藏菜单并保留它,或者如果你再也不会显示它就用 gui:Destroy()。
常见问题
怎么让菜单在屏幕上居中?
把面板的 AnchorPoint 设为 Vector2.new(0.5, 0.5),Position 设为 UDim2.fromScale(0.5, 0.5)。面板就会以自己的中点而不是左上角居中。
为什么重生后菜单就没了?
ScreenGui 默认在重生时重置。在 ScreenGui 上设 ResetOnSpawn = false 让它常驻。
