Appearance
UI系统
UI 系统是什么
Unity 的 UI 系统,就是负责“玩家看到的界面”和“玩家点击、拖动、输入文字”的那一套东西。
比如:
- 主菜单
- 暂停界面
- 血条、金币、分数
- 背包、商店、任务面板
- 按钮、滑条、输入框
- 战斗里的技能按钮
- 手机游戏里的虚拟摇杆
你可以先记一句话:
UI 系统 = Canvas 放界面 + RectTransform 管位置大小 + Canvas Scaler 管屏幕适配 + EventSystem 管点击 + 控件调用脚本零基础先学哪套 UI Unity 现在主要有三套 UI:
| 系统 | 适合什么 | 新手建议 |
|---|---|---|
| uGUI / Unity UI | 游戏运行时界面,比如按钮、血条、背包 | 先学这个 |
| UI Toolkit | 编辑器工具、复杂 UI,也可做运行时 UI | 后面再学 |
| IMGUI | 老式代码 UI,常用于调试和编辑器扩展 | 了解即可 |
你现在学 Unity,建议先把 uGUI 学扎实,因为它和 GameObject + Component 思想是一致的: 一个按钮本质上也是一个 GameObject,上面挂了 RectTransform、Image、Button、Text 等组件。
1. Canvas:UI 的画布
Canvas 是 UI 的根容器。大多数 UI 元素都要放在 Canvas 下面。
可以把 Canvas 想成一张透明玻璃板:
c
Canvas
├── Button
├── Text
├── Image
├── Panel
└── SliderCanvas 有三种常见渲染模式:
| 模式 | 意思 | 常见用途 |
|---|---|---|
| Screen Space - Overlay | UI 直接盖在屏幕上 | 菜单、HUD、血条、按钮 |
| Screen Space - Camera | UI 由某个摄像机渲染 | 需要和相机效果配合 |
| World Space | UI 存在于 3D 世界里 | NPC 头顶血条、场景里的操作面板 |
新手一开始用:
c
Screen Space - Overlay最简单,最不容易出问题。
2. RectTransform:UI 的位置和大小
普通物体用 Transform,UI 物体用 RectTransform。
RectTransform 负责:
- UI 在哪里
- UI 多大
- UI 锚定到屏幕哪里
- UI 以哪个点为中心缩放
- 父物体变化时,子 UI 怎么跟着变化
最重要的是三个概念:
| 概念 | 作用 | 小白理解 |
|---|---|---|
| Anchor 锚点 | 决定 UI 贴着父容器哪里 | 贴左上、贴右下、居中、拉伸 |
| Pivot 轴心 | 决定旋转/缩放中心 | UI 自己的中心点 |
| Pos / Width / Height | 位置和尺寸 | 最直观的坐标和大小 |
举例:
- 血条放左上角:Anchor 设左上
- 暂停按钮放右上角:Anchor 设右上
- 开始按钮放屏幕中间:Anchor 设中间
- 底部技能栏:Anchor 设底部拉伸
3. Canvas Scaler:屏幕适配
不同手机、电脑屏幕大小不一样,如果不处理,UI 可能会变大、变小、跑偏。
Canvas Scaler 就是专门处理这个问题的。
新手常用设置:
UI Scale Mode: Scale With Screen Size
Reference Resolution: 1920 x 1080
Screen Match Mode: Match Width Or Height
Match: 0.5意思是: 你按一个参考分辨率设计 UI,Unity 会根据真实屏幕自动缩放。
这是做移动游戏时非常重要的一步。
4. EventSystem:谁负责点击
按钮能不能点,滑条能不能拖,输入框能不能输入,背后主要靠:
c
EventSystem
Graphic Raycaster
Input Module你可以这样理解:
c
鼠标/手指点击屏幕
↓
EventSystem 收到输入
↓
Graphic Raycaster 检查点到了哪个 UI
↓
Button / Slider / Toggle 触发事件
↓
你的脚本执行逻辑如果按钮点不了,常见原因是:
- 场景里没有 EventSystem
- Canvas 上没有 Graphic Raycaster
- UI 被别的透明 Image 挡住了
- Button 的 Interactable 没勾
- Image 的 Raycast Target 挡住了下面的按钮
5. 常用 UI 控件
新手先掌握这些就够了:
| 控件 | 用途 |
|---|---|
| Text / TextMeshPro | 显示文字 |
| Image | 显示图片、背景、图标 |
| Button | 按钮点击 |
| Slider | 血条、音量条、进度条 |
| Toggle | 开关、勾选 |
| Input Field | 输入名字、聊天 |
| Scroll View | 背包列表、排行榜 |
| Panel | 界面分组容器 |
比如一个开始按钮通常是:
c
StartButton
RectTransform:决定按钮位置大小
Image:决定按钮背景图
Button:负责点击事件
Text / TMP Text:显示“开始游戏”6. UI 和脚本怎么连接
最常见方式是在 Button 的 OnClick() 里绑定脚本方法。
例如:
c
using UnityEngine;
using UnityEngine.SceneManagement;
public class MainMenuUI : MonoBehaviour
{
public void StartGame()
{
SceneManager.LoadScene("Game");
}
public void QuitGame()
{
Application.Quit();
}
}然后在 Inspector 里:
c
Button 组件
OnClick()
拖入挂着 MainMenuUI 的对象
选择 MainMenuUI.StartGame()这样玩家点击按钮时,就会执行 StartGame()。
学习顺序
建议你按这个顺序学:
- 先创建 Canvas、Panel、Button、Text
- 学会 RectTransform、Anchor、Pivot
- 学 Canvas Scaler 做屏幕适配
- 学 Button OnClick 绑定脚本
- 学 Slider 做血条/音量
- 学 Scroll View 做背包/列表
- 学 UI 显示和隐藏,比如打开背包、暂停菜单
- 最后再学 UI Toolkit
官方参考链接