Unity UI 系统:Canvas、布局与响应式

FreeGuideOnline 最新 2026-06-17

什么是 Unity UI 系统?

Unity UI 系统(uGUI)是 Unity 引擎内置的一套基于游戏对象的可视化界面解决方案。它允许你以完全所见即所得的方式创建按钮、文本、滑块、滚动视图等元素,无需编写复杂的渲染代码。本教程将围绕其三大核心支柱展开:Canvas(画布)、布局(Layout)与响应式(Responsive Design),帮你从零搭建既美观又适配的界面。

Canvas —— 一切 UI 的容器

Canvas 是所有 UI 元素的绘制表面。任何一个 UI 物体都必须作为 Canvas 的子物体才能被渲染。

三种渲染模式

创建 Canvas 时,你需要根据项目类型选择渲染模式:

  • Screen Space - Overlay(屏幕空间 - 覆盖)
    最常用的模式。UI 直接绘制在屏幕上,覆盖在所有摄像机画面之上,无论场景中是否有摄像机,UI 始终可见且保持位置固定。适合血量条、菜单、HUD 等需要始终显示在最前端的界面。
  • Screen Space - Camera(屏幕空间 - 摄像机)
    UI 放置在一个指定摄像机的屏幕空间内,物体会随摄像机运动产生透视效果(根据 Plane Distance 设置)。可用于需要在 UI 上添加场景物体或特殊摄像机特效的情况。
  • World Space(世界空间)
    Canvas 像普通游戏物体一样存在于 3D 世界,可旋转、缩放并受光照影响。常用于游戏中的指示牌、VR 界面、或者漂浮在角色身边的名称框。

Canvas Scaler —— 适配不同分辨率的钥匙

Canvas Scaler 组件决定了 UI 在不同屏幕尺寸下如何缩放。这在响应式设计中至关重要。核心模式有:

  • Constant Pixel Size(恒定像素大小)
    UI 元素保持其像素尺寸不变,屏幕变小时 UI 可能显得过大,屏幕变大时 UI 则可能过小。只适用于对分辨率有绝对控制的环境,不推荐用于移动端或窗口化游戏。
  • Scale With Screen Size(随屏幕大小缩放)
    黄金模式。你可以设定一个“参考分辨率”(如 1920x1080),并选择匹配方式(Match)。当实际分辨率与参考分辨率比例不同时,系统会根据宽度或高度的匹配比例来统一缩放 UI 的 Canvas,保证整体布局比例稳定。
  • Constant Physical Size(恒定物理尺寸)
    根据屏幕的 DPI 让 UI 保持厘米/英寸级别的物理大小,较少使用。

最佳实践:将 Canvas Scaler 设置为 Scale With Screen Size,参考分辨率设为最常见的设计尺寸(如 1920×1080),Match 值设为 0.5(在宽度和高度之间妥协)或根据游戏竖屏/横屏特性微调。

RectTransform —— UI 独有的变换组件

所有 UI 物体使用 RectTransform 替代普通物体的 Transform。它引入了 锚点轴心尺寸增量 的概念,是布局和响应式的基石。

锚点(Anchors)与锚框

锚点定义了 UI 元素相对其父级矩形的位置基准。默认锚点汇集在父级中心,元素坐标固定;但当你将四个三角锚点分开,就形成了一个锚框(Anchored Min/Max)。

  • 固定位置:锚点汇集于一点,Pos X/Y 表示该点相对锚点位置的偏移,元素大小不变。
  • 拉伸填充:将锚框的四个角分别拖到父级矩形的四边,Left/Right/Top/Bottom 变成了距离边的固定距离,元素会随父级自动拉伸。非常适合做背景框、全屏按钮等。
  • 如何快速设置:在 Rect Transform 组件面板上点击带有红蓝线的锚点预设图标(Anchor Presets),按住 AltShift 键可直接设置锚点位置并附带位置归零。

理解并通过练习掌握锚点,是做出响应式 UI 的前提。

布局系统 —— 自动排列与尺寸适配

手动摆放每个 UI 元素不仅耗时,且无法适应动态内容。Unity 提供了强大的自动布局组件,全部位于 Layout 下。

布局组(Layout Groups)

用于控制子物体的自动排列方式:

  • Horizontal Layout Group(水平布局组)
    子物体从左到右水平排列。可控制间距、内边距、子物体对齐方式,以及是否强制子物体宽度/高度伸展。
  • Vertical Layout Group(垂直布局组)
    子物体从上到下垂直排列。常用在列表、背包格、对话选项等场景。
  • Grid Layout Group(网格布局组)
    子物体按指定的“单元格大小”和“列数/行数”自动布局成网格,非常适合背包、卡片选择界面。通过调整 Constraint 可固定列数或行数,实现滚动列表的横向或纵向填充。

关键提示:布局组与子物体自身的 Layout Element 组件配合使用,可以指定某个元素的最小/优先/灵活尺寸,实现按比例分配空间(例如两栏布局时左栏固定 200 像素,右栏自动填满)。

Content Size Fitter(内容尺寸适配器)

该组件让一个 UI 元素的矩形大小自动适应其内容(子物体或文本)。通常挂载在文本自身或拥有子布局的父物体上。

  • Horizontal/Vertical Fit:可分别设为 Preferred Size(适应内容偏好的大小,避免截断)或 Min Size(适应内容最小大小)。
  • 典型用途:制作一个宽度固定、高度根据文本内容自动变化的对话框背景。在文本物体上添加 Content Size Fitter(Vertical Fit 设为 Preferred Size),父背景使用 Vertical Layout Group 并添加 Content Size Fitter,即可实现高度自增。

Aspect Ratio Fitter(宽高比适配器)

强制元素保持特定的宽高比。适用场景包括保持图片正方形、头像圆形、以及使元素适配特定比例的占位区域。

构建一次,处处适配 —— 响应式设计工作流

结合上述工具,你可以建立一套可靠的响应式 UI 制作流程:

  1. 规划层级
    将界面拆分为面板(Panel)、栏、按钮组等结构。每个结构都有清晰的父子关系,便于通过锚点划分区域。

  2. 顶层使用锚点分区
    在 Canvas 下创建几个作为容器的空物体,利用锚点拉伸将它们固定在屏幕的上、下、左、右或角落。例如底部动作条可用锚点固定在左下和右下角,并设置向左、右、下的边距。

  3. 中层使用布局组排列
    在容器内部,使用 Horizontal/Vertical Layout Group 自动排列按钮、图标和文本。配合 Layout Element 分配空间。

  4. 底层元素自适应内容
    对文本、动态列表等元素添加 Content Size Fitter,使其尺寸随内容变化,同时外层容器利用布局组重新调整位置。

  5. 统一缩放保证比例
    Canvas 挂载 Canvas Scaler 设为 Scale With Screen Size,并保持单一的参考分辨率。所有 UI 元素的尺寸和边距都基于这个参考分辨率设计,系统自动计算缩放系数。

  6. 极端情况处理
    对于极端超宽屏或特殊比例,可在 Canvas Scaler 的 Match 滑块上动态调整,或使用 AspectRatioFitter 限制核心区域的比例,并在安全区域外布置背景。

常见问题与优化提示

  • UI 点击穿透:如果多层 UI 叠加,只有最上层的 Raycast Target 会接收到点击。不需要交互的图像请务必关闭 Raycast Target,既保证功能正确,又提升性能。
  • Canvas 的重绘开销:当 Canvas 内任何 UI 元素发生变化(颜色、图片、布局等),整个 Canvas 都需要重建网格。应将动态变化频繁的 UI 放在独立的 Canvas 中,隔离重绘范围。
  • 图集与 Draw Call:UI 图像尽量打包到同一个图集(Sprite Atlas),相同材质和纹理可以合批,减少 Draw Call。
  • 文本最佳字体:使用 TextMeshPro(TMP)替代传统 Text 组件,渲染质量更高且支持更丰富的文本效果,是当前 Unity 官方推荐方案。

通过系统掌握 Canvas、布局组件与锚点响应式原理,你将告别 UI 适配的挫败感,轻松构建出专业且适配任何屏幕的交互界面。现在,打开 Unity,从一个带有 Canvas Scaler 的全新 Canvas 开始练习吧。