除非 UI 物件受到 佈局結構 或 大小修飾符/約束 的控制,否則您可以完全控制它們的 位置 和 大小。您還可以設置 Z‑index 層級 物件重疊的順序。
核心屬性
所有 GuiObjects 共享一組核心屬性來 定位、調整大小、錨點 和 層級 它們在螢幕或遊戲容器內。
位置
Position 屬性是一組 UDim2 坐標集,用於沿著 X 和 Y 軸定位物件。UDim2 由每個軸的 Scale 和 Offset 值表示:

要編輯所選 GuiObject 的位置,請單擊 屬性 窗口中的 位置 欄位,並輸入新的 UDim2 坐標集。


大小
Size 屬性是一組 UDim2 坐標集,用於沿著 X 和 Y 軸調整物件的大小。UDim2 由每個軸的 Scale 和 Offset 值表示:
- 比例 — 表示容器大小沿相應軸的 百分比 的值,加上任何 偏移 值。
- 偏移 — 表示物件沿相應軸的 像素 大小的值,加上任何 比例 值。
要編輯所選 GuiObject 的大小,請單擊 屬性 窗口中的 大小 欄位,並輸入新的 UDim2 坐標集。


錨點
AnchorPoint 屬性定義了物件變更 位置 和 大小 的 原點。預設的 AnchorPoint 值為 (0, 0),這將錨點放置在物件的左上角。
AnchorPoint 值是從 0 到 1 的 分數,相對於物件的 大小,這意味著具有 AnchorPoint 值 (0.5, 0.5) 的物件將錨點放置在物件的水平和垂直中間(50%),對其 位置 或 大小 的任何更改都將從此點向外移動和縮放。


要查看和編輯所選 GuiObject 的錨點:
ZIndex
ZIndex 屬性定義了 GuiObjects 渲染和重疊的層級順序。如果您想創建新的渲染層,必須為每個物件將 ZIndex 屬性設置為不同的正整數或負整數值。
對於像 ScreenGui 這樣的 UI 容器,預設的 ZIndexBehavior 總是將子物件渲染在其父物件之上,每個子物件的 ZIndex 用於決定其在其他物件之上渲染的順序。
要編輯物件的 ZIndex,請在 屬性 窗口中找到 ZIndex 並輸入新的整數值。

佈局結構
佈局結構讓您快速組織和顯示 GuiObjects,例如進行水平或垂直的 列表、均勻大小的瓷磚 網格、頁面序列 等。佈局通常會覆蓋或影響其控制下物件的 位置/大小。
| 佈局 | 描述 |
|---|---|
| 列表 | UIListLayout 將兄弟 GuiObjects 定位到其父容器內的水平行或垂直列。 |
| 網格 | UIGridLayout 將兄弟 GuiObjects 定位到其父容器內的均勻大小的網格單元。 |
| 表格 | UITableLayout 將兄弟 GuiObjects 及其子物件定位為表格格式。 |
| 頁面 | UIPageLayout 將其兄弟 GuiObjects 組織成獨特的頁面,您可以通過腳本進行過渡。 |
跨平台因素
Roblox 本質上是 跨平台 的,因為玩家可以在手機或平板電腦上發現並加入遊戲,然後在 PC 或主機上繼續他們的進度。您應該設計您的 Roblox 遊戲,使其在您選擇支持的 所有 平台上都能訪問和享受,而不是針對一個平台進行優化而忽略其他平台。
保留區域
在移動設備上,預設控制佔據螢幕左下角和右下角的一部分。當您設計遊戲的 UI 時,請避免在這些區域放置重要信息或虛擬按鈕。

拇指區域
大多數移動玩家使用兩個拇指 — 一個在虛擬搖桿上,另一個在跳躍按鈕上。根據設備的物理大小和玩家的手,從底部角落伸手過遠會變得不舒服或不可能,因此您應該避免將經常使用的按鈕放置在難以觸及的區域之外。


請記住,舒適的拇指區域在手機和平板之間有所不同,因為平板的螢幕更大。放置在螢幕上邊緣下方 40% 的按鈕在手機上可觸及,但在平板上幾乎無法觸及。


在手機和平板上可靠的方法是將自定義按鈕 相對 定位在經常使用的控制項附近,例如預設的跳躍按鈕,將它們放置在易於觸及的範圍內。

以下代碼放置在 StarterPlayerScripts 中的客戶端腳本內,獲取跳躍按鈕的位置並在其左側創建一個佔位符 按鈕 ,距離 20 像素。
local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
if UserInputService.TouchEnabled then
-- 等待跳躍按鈕完全加載
while not (playerGui:FindFirstChild("JumpButton", true) and playerGui:FindFirstChild("JumpButton", true).IsLoaded) do
task.wait()
end
local jumpButton = playerGui:FindFirstChild("JumpButton", true)
-- 將新的自定義按鈕放置在跳躍按鈕的左側
local customButton = Instance.new("ImageButton")
customButton.AnchorPoint = Vector2.new(1, 1)
customButton.Size = UDim2.fromOffset(jumpButton.Size.X.Offset * 0.8, jumpButton.Size.Y.Offset * 0.8)
customButton.Position = jumpButton.Position + UDim2.fromOffset(-20, jumpButton.Size.Y.Offset)
customButton.Parent = jumpButton.Parent
else
warn("設備不支持觸控或 Studio 沒有模擬觸控設備!")
end基於上下文的 UI
在移動設備上,螢幕空間有限,因此您應該在主動遊玩期間僅顯示最重要的信息。例如,如果您的遊戲包含一個特殊的輸入動作來打開門和寶箱,則不需要在螢幕上不斷顯示“打開”按鈕。相反,使用 接近提示 或類似方法僅在角色接近門或寶箱時接受輸入。

