跳到主要内容

UI 布局:从 CSS 习惯切换到节点装配

小游戏的 UI 同样要解决对齐、间距、滚动和遮挡,但不会自动按浏览器文档流排版。先建立节点尺寸与父子关系,再选择合适的布局组件。

UI 布局组件与节点层级分工点击图片查看原图 ↗

五种常用零件​

零件主要职责适合的场景
UITransform内容尺寸、锚点和 UI 空间变换确定按钮点击区域
Widget与父级或目标边缘对齐顶部 HUD、底部操作区
Layout按横向、纵向或网格排列子节点背包格子、商店条目
ScrollView管理滚动视口与内容较长的任务列表
Mask限制可见区域滚动列表裁剪、头像边界

这些不是 CSS Flex/Grid 的完整替代品。不要期待任意 CSS 属性都有一一对应项。

做一个 HUD 的步骤​

  1. 在 Canvas 下建 HUD,设置合适的 UITransform。
  2. 给 HUD 添加 Widget,与顶部安全区域对齐,留出边距。
  3. 让积分、时间分别落在左右区域;文字长度变化时仍保留空间。
  4. 将结果弹窗放在独立 ResultLayer,检查显示顺序与输入拦截。
  5. 用最长的中文文案、三位以上分数和窄屏测试布局。

UI 层级顺序常受父子关系和 sibling 顺序影响。Creator 3.x 不应混用 2.x 教程中的 zIndex 方案;先查升级说明。

列表会遇到的规模问题​

十个背包格子可以直接实例化。几千条数据全部创建节点、文字和图片,内存与布局计算可能明显增长。ScrollView 本身不等于已经完成列表虚拟化;应先测量,再决定是否复用可见条目。

数据列表与可见节点应分开理解:关掉某个格子的节点,不等于从背包数据中删除物品;销毁节点也不应该误删服务端资产。

给 AI 一份具体规格​

做一个 4 列背包网格,最多显示 40 个物品。
每格有图标、数量、选中边框;长按/拖动暂不做。
空背包显示说明,图片失败显示占位,弹窗打开时阻止背景点击。
请列节点树、Layout/ScrollView/Mask 配置和数据刷新入口。
验收:最长物品名不挡住数量,窄屏不溢出,重复打开不重复生成格子。

排错时先临时去掉复杂布局,确认一个格子的尺寸和锚点,再恢复排列与滚动。不要同时改父节点缩放、子节点尺寸和字体大小。

依据:UI 系统、Widget 组件、Layout 组件。