Skip to content

UI系统

unity-ui-system

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,上面挂了 RectTransformImageButtonText 等组件。

1. Canvas:UI 的画布

Canvas 是 UI 的根容器。大多数 UI 元素都要放在 Canvas 下面。

可以把 Canvas 想成一张透明玻璃板:

c
Canvas
  ├── Button
  ├── Text
  ├── Image
  ├── Panel
  └── Slider

Canvas 有三种常见渲染模式:

模式意思常见用途
Screen Space - OverlayUI 直接盖在屏幕上菜单、HUD、血条、按钮
Screen Space - CameraUI 由某个摄像机渲染需要和相机效果配合
World SpaceUI 存在于 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()

学习顺序

建议你按这个顺序学:

  1. 先创建 Canvas、Panel、Button、Text
  2. 学会 RectTransform、Anchor、Pivot
  3. 学 Canvas Scaler 做屏幕适配
  4. 学 Button OnClick 绑定脚本
  5. 学 Slider 做血条/音量
  6. 学 Scroll View 做背包/列表
  7. 学 UI 显示和隐藏,比如打开背包、暂停菜单
  8. 最后再学 UI Toolkit

官方参考链接

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0