除非用户界面对象受到 布局结构 或 尺寸调整器/约束 的控制,否则您完全控制其 位置 和 尺寸。您还可以设置 Z‑index 重叠顺序 对象重叠的排序。
核心属性
所有 GuiObjects 共享一个核心集的属性到 位置 , 尺寸 , 锚 和 层 它们在屏幕上或体验中的容器内。
位置
Position 属性是一个UDim2坐标集,位置在对象沿着 X 和 Y 轴。A UDim2 由每个轴的 Scale 和 Offset 值代表:

要编辑选定 GuiObject 的位置,请单击 位置 字段在 属性 窗口,然后输入新的 UDim2 坐标设置。


大小
Size 属性是一个UDim2坐标集,可以沿 X 和 Y 轴缩放对象。A UDim2 由每个轴的 Scale 和 Offset 值代表:
- 缩放 — 以相应轴为单位的容器大小的 百分比 值,可以加到任何 抵消 值。
- 抵消 — 代表对应轴上对象 像素 尺寸的值,可加到任何 缩放值 。
要编辑选定的 GuiObject 的大小,请单击 大小 字段在 属性 窗口,然后输入新的 UDim2 坐标设置。


锚点
属性定义了从哪里对象改变位置和大小的起始点。默认值 值是 ,将锚放在对象的左上角。
值是对对象的 比例 从 到 的,相对于对象的 尺寸 ,意味着具有 值的对象将锚点放在中间(50%)通过对象的横向和垂直方向移动和缩放,任何对其位置或尺寸的更改都将从这一点向外移动和缩放。


要查看并编辑选定 GuiObject 的锚点:
Z索引
ZIndex 属性定义了层次顺序,在 котором GuiObjects 渲染和重叠。如果您想创建新的渲染层,您必须将 ZIndex 属性设置为每个对象的不同正整数或负整数值。
对于像 ScreenGui 这样的 UI 容器,默认 ZIndexBehavior 总是渲染上级的孩子,每个孩子的 ZIndex 用于决定它在其他孩子上渲染的顺序。
要编辑对象的 ZIndex ,请在 属性窗口 中找到 ZIndex 并输入新的整数值。

布局结构
布局结构可以快速组织和显示,例如将其转换为横向或纵向列表、相同尺寸的网格、页面顺序和更多。布局通常会覆盖或影响控制下的对象的 位置 / 大小。
布局 | 描述 |
---|---|
列表 | UIListLayout 位置兄弟 GuiObjects 到父容器内的横向行或垂直列中。 |
网格 | UIGridLayout 位置兄弟 GuiObjects 在父容器内的相同尺寸的单元网格内。 |
表 | UITableLayout 位置兄弟 GuiObjects 和他们的孩子转换为表格格式。 |
页 | UIPageLayout 将其兄弟 GuiObjects 组织成独特的页面,可以通过脚本转换到。 |
跨平台因素
Roblox 本质上具有 跨平台 特性,因为玩家可以在 PC 或游戏机上发现并加入体验,然后稍后拿起手机并继续他们离关闭的地方。你应该设计你的 Roblox 体验在你选择支协助的所有 平台 上都能访问和愉快,而不是优化一个平台并忽略其他平台。
保留区
在移动设备上,默认控件占用屏幕左下角和右下角的一部分。当你设计体验的用户界面时,避免在这些区域放置重要信息或虚拟按钮。

拇指区域
大多数移动玩家使用两个拇指——一个在虚拟拇钮上,另一个在跳跃按钮上。根据设备的物理尺寸和玩家的手,距离底角过远会导致不舒服或不可能,因此您应该避免将常用按钮放置在易于达到的区域之外。


请记住,舒适的拇指区域与手机和平板电脑之间存在差异,因为平板电脑拥有更大的屏幕。放置在屏幕顶部 40% 以下的按钮可在手机上访问,但几乎无法在平板电脑上访问。


在手机和平板电脑上的可靠方法是 相对 定位自定义按钮靠近常用控件,如默认跳跃按钮,放置在易于达到的位置。

以下验证码,放置在客户端脚本内的 StarterPlayerScripts 中,获取跳跃按钮的位置并创建一个占位符 按钮 20像素到其左侧。
客户端脚本 - 跳跃按钮附近的自定义按钮
local 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("Device is not touch-enabled or Studio is not emulating a touch-enabled device!")end
上下文基础的用户界面
屏幕空间在移动设备上受限,因此您应该在激活游戏期间显示最重要的信息。例如,如果你的体验包括打开门和宝箱的特殊输入操作,那么始终显示屏幕上一个“打开”按钮就没有意义了。相反,使用 靠近提示 或类似方法,只在字符接近门或箱子时才接受输入。
