除非 UI 物件受 佈局結構 或 大小修飾符/約束 的控制,否則您對其 位置 和 大小 擁有完整的控制權。您還可以設置 Z 索引 層次 以決定物件重疊的次序。
核心屬性
所有 GuiObjects 共享一組核心屬性來 定位、調整大小、定位點 和 層。
位置
Position 屬性是一組 UDim2 協調,將物件定位於 X 和 Y 軸上。一個 UDim2 由每個軸的 Scale 和 Offset 兩者的值表示:

要編輯所選 GuiObject 的位置,請在 屬性 窗口中單擊 位置 欄位,然後輸入新的 UDim2 協調集。


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


錨點
AnchorPoint 屬性定義了物件變更 位置 和 大小 的 原點。預設的 AnchorPoint 值為 (0, 0),將錨點放置在物件的左上角。
AnchorPoint 值是一個從 0 到 1 的 比率,相對於物件的 大小,這意味著錨點值為 (0.5, 0.5) 的物件將錨點置於物件的中間(50%),在水平方向和垂直方向上均相對於此點進行變更其 位置 或 大小。


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

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

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


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


在手機和平板上,一個可靠的方法是 相對 定位自定義按鈕,靠近類似於預設跳躍按鈕等常用控件,將其放置在易於觸及的範圍內。

以下代碼放置在 StarterPlayerScripts 中的客戶端腳本內,獲取跳躍按鈕的位置,並在其左側 20 像素處創建一個佔位 按鈕。
Client Script - Custom Button Near Jump Buttonlocal Players = game:GetService("Players")local UserInputService = game:GetService("UserInputService")local player = Players.LocalPlayerlocal playerGui = player:WaitForChild("PlayerGui")if UserInputService.TouchEnabled then-- 等待跳躍按鈕完全加載while not (playerGui:FindFirstChild("JumpButton", true) and playerGui:FindFirstChild("JumpButton", true).IsLoaded) dotask.wait()endlocal 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.Parentelsewarn("設備不支持觸控或 Studio 未模擬觸控設備!")end
基於情境的 UI
在移動設備上,螢幕空間有限,因此您應該在積極遊玩時僅顯示最關鍵的信息。例如,如果您的體驗包括一個特殊的輸入動作來打開門和寶箱,則在螢幕上不合適持續顯示 "打開" 按鈕。相反,使用 接近提示 或類似方法,僅在角色接近門或寶箱時接受輸入。

