Roblox Gui

sentinelcore/roblox-skills/roblox-gui

作者 sentinelcoref2b1910a7fb898ed35cf2f856e2a2e48e38276bf無授權條款收錄於 2026年10月9日更新於 2026年10月9日

Use when building, animating, or debugging Roblox GUI elements including HUDs, menus, world-space UI, and player labels. Triggers on: ScreenGui setup, SurfaceGui or BillboardGui placement, UDim2 sizing questions, TweenService UI animations, responsive scaling, LocalScript GUI logic, ResetOnSpawn issues, or any Frame/TextLabel/ImageButton layout work.

AI 產生的概覽

用於建置、製作動畫與偵錯 Roblox GUI 元素(例如 HUD、選單與世界空間 UI)的參考文件。

功能
此技能是一份 Roblox GUI 開發參考文件。內容涵蓋容器類型(ScreenGui、SurfaceGui、BillboardGui)、UDim2 尺寸與定位、響應式設計、TweenService 動畫、LocalScript 放置位置、ResetOnSpawn 行為、常見版面模式以及常見錯誤。它提供程式碼片段與表格,而非可執行的指令碼。
適用情境
適用於建立或偵錯 Roblox 介面,例如 HUD、選單、覆蓋層、名牌或血條。也適用於 UDim2 尺寸、響應式縮放、UI 動畫,或 GUI 指令碼在重生後未保留等問題。
執行需求
此技能不隨附指令碼或資源,僅為說明文件與程式碼範例。範例以 Roblox Studio 與 Luau 為對象,並假定可存取 Roblox 引擎及其服務。

Roblox GUI Reference

GUI Container Types

ContainerParentUse Case
ScreenGuiPlayerGuiHUDs, menus, overlays — always faces screen
SurfaceGuiBasePartWorld-space UI on a part surface (signs, screens)
BillboardGuiBasePart or ModelFloats above a part in 3D space (name tags, health bars)

ScreenGui

lua
-- LocalScript in StarterGui or StarterPlayerScriptslocal player = game:GetService("Players").LocalPlayerlocal playerGui = player:WaitForChild("PlayerGui")
local screenGui = Instance.new("ScreenGui")screenGui.Name = "HUD"screenGui.ResetOnSpawn = false   -- keep GUI across respawnsscreenGui.ZIndexBehavior = Enum.ZIndexBehavior.SiblingscreenGui.Parent = playerGui

SurfaceGui

lua
local surfaceGui = Instance.new("SurfaceGui")surfaceGui.Face = Enum.NormalId.FrontsurfaceGui.SizingMode = Enum.SurfaceGuiSizingMode.PixelsPerStudsurfaceGui.PixelsPerStud = 50surfaceGui.Parent = workspace.ScreenPart
local label = Instance.new("TextLabel")label.Size = UDim2.fromScale(1, 1)label.Text = "Hello World"label.Parent = surfaceGui

BillboardGui

lua
local billboard = Instance.new("BillboardGui")billboard.Size = UDim2.fromOffset(200, 50)billboard.StudsOffset = Vector3.new(0, 2.5, 0)  -- float above headbillboard.AlwaysOnTop = falsebillboard.Parent = character:WaitForChild("Head")
local nameLabel = Instance.new("TextLabel")nameLabel.Size = UDim2.fromScale(1, 1)nameLabel.BackgroundTransparency = 1nameLabel.Text = player.DisplayNamenameLabel.Parent = billboard

UDim2 Sizing and Positioning

UDim2.new(xScale, xOffset, yScale, yOffset) — scale is 0–1 relative to parent, offset is pixels.

lua
frame.Size     = UDim2.new(1, 0, 0, 50)       -- full width, 50px tallframe.Position = UDim2.new(0, 0, 0, 0)         -- top-left corner
frame.Size     = UDim2.fromScale(0.6, 0.4)     -- 60% wide, 40% tallframe.Position = UDim2.new(0.2, 0, 0.3, 0)    -- centered (0.2 = (1-0.6)/2)
UDim2.fromScale(0.5, 0.5)    -- scale onlyUDim2.fromOffset(300, 150)   -- pixels only

AnchorPoint shifts the element's pivot (0–1 on each axis):

lua
frame.AnchorPoint = Vector2.new(0.5, 0.5)   -- pivot at centerframe.Position    = UDim2.fromScale(0.5, 0.5)  -- truly centered on screen

Responsive Design

Prefer scale over offset so UI adapts to all screen sizes.

lua
button.Size     = UDim2.fromScale(0.2, 0.07)button.Position = UDim2.new(0.4, 0, 0.85, 0)
-- Prevent distortion with UIAspectRatioConstraintlocal arc = Instance.new("UIAspectRatioConstraint")arc.AspectRatio = 4   -- width:height = 4:1arc.Parent = button

TweenService Animations

lua
local TweenService = game:GetService("TweenService")local tweenInfo = TweenInfo.new(0.3, Enum.EasingStyle.Quad, Enum.EasingDirection.Out)
local menuFrame = script.Parent
local function openMenu()    TweenService:Create(menuFrame, tweenInfo, {        Position = UDim2.new(0.05, 0, 0.1, 0)    }):Play()end
local function closeMenu()    TweenService:Create(menuFrame, tweenInfo, {        Position = UDim2.new(-0.5, 0, 0.1, 0)    }):Play()end
-- Animated progress barlocal function setProgress(bar, pct)    TweenService:Create(bar, TweenInfo.new(0.2), {        Size = UDim2.new(pct, 0, 1, 0)    }):Play()end

LocalScript Placement

LocationNotes
StarterGuiCloned into PlayerGui on join; use ResetOnSpawn = false to persist
StarterPlayerScriptsRuns once, not reset on respawn; good for persistent managers
StarterCharacterScriptsRe-runs each spawn; suited for character-dependent UI
lua
-- Safe pattern: wait for characterlocal player = game:GetService("Players").LocalPlayerlocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:WaitForChild("Humanoid")
humanoid.HealthChanged:Connect(function(health)    -- update health barend)

ResetOnSpawn

lua
screenGui.ResetOnSpawn = false  -- persist across respawns (inventory, settings)screenGui.ResetOnSpawn = true   -- re-create on respawn (respawn timer) — default

Common Patterns Quick Reference

PatternKey Setup
Full-screen overlaySize = UDim2.fromScale(1,1), Position = UDim2.fromScale(0,0)
Bottom-center HUD barAnchorPoint = (0.5,1), Position = UDim2.new(0.5,0,1,-10)
Padded listUIPadding + UIListLayout inside a Frame
Scrollable listScrollingFrame + UIListLayout; set CanvasSize from UIListLayout.AbsoluteContentSize
Rounded cornersUICorner with CornerRadius = UDim.new(0, 8)
Scaled textTextScaled = true on TextLabel/TextButton so font grows with container
Dynamic frame heightAutomaticSize = Enum.AutomaticSize.Y so frame expands to fit children
Health barNested frames: outer = background, inner tweened by Size.X.Scale
Name tagBillboardGui on Head, StudsOffset = Vector3.new(0, 2.5, 0)

Common Mistakes

MistakeFix
GUI disappears on respawnSet ResetOnSpawn = false or use StarterPlayerScripts
UI looks wrong on mobileUse UDim2.fromScale + UIAspectRatioConstraint
Script can't find PlayerGuiUse player:WaitForChild("PlayerGui")
Tween doesn't runEnsure the property is tweenable; Text is not, Position and Size are
BillboardGui visible through wallsVerify AlwaysOnTop = false
AbsoluteSize is zero on first frameRead it inside task.defer or after first render step
Clicks pass through overlapping framesAdd a transparent input-blocking Frame or set Modal = true
SurfaceGui flickersSet LightInfluence = 0; ensure part isn't too thin
Text tiny on mobileSet TextScaled = true — fixed TextSize doesn't adapt to screen size
UI hard to test on mobileUse Studio's Device Emulator (Test tab → Device) to preview layouts

來源與署名

來源:sentinelcore/roblox-skills位於roblox-gui提交f2b1910

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架