首页/ 第 10 章 · UI 界面系统/ 第 147 课
LESSON 147 · UI 界面系统

事件系统 EventSystem

事件系统已掌握。下一课学 Text 文本。

⏱ 约 12 分钟📊 难度:入门🗂 第 10 章 · UI 界面系统📍 第 147 / 300 课
课程进度
147 / 300

🎯本节学习目标

  • 理解 EventSystem 作用
  • 掌握常用 UI 事件接口
  • 理解事件传递

🚀课程导读

为什么鼠标能“点中”按钮?全靠 EventSystem。本课搞懂 UI 事件的机制。

EventSystem 组件

UI 的“总管”。

  1. 【自动创建】创建 UI 时自动生成 EventSystem 对象,含 EventSystem + StandaloneInputModule 组件。
  2. 【EventSystem】负责“谁是当前选中的 UI”、“事件怎么派发”。
  3. 【Standalone Input Module】把鼠标/键盘/触摸转换成 UI 事件(点击、悬停、拖拽)。
  4. 【删除后果】删除 EventSystem 后,所有 UI 点击失效!
  5. 【Graphic Raycaster】Canvas 自带,负责“射线命中”:判断鼠标点中了哪个 UI 元素。
  6. 【事件流向】鼠标位置 → Raycaster 找命中的 UI → EventSystem 派发事件给该元素(及其上的监听脚本)。
  7. 【重要】UI 元素要能被点击:要有 Graphic(Image/Text)且 Raycast Target 勾选。
EventSystem 千万别删!删了 UI 全“失灵”,这是新手高频事故。

UI 事件接口

不用按钮也能响应 UI 事件。

  1. 把脚本挂到 UI 元素上,实现对应接口即可接收事件:
  2. 【IPointerClickHandler】点击:void OnPointerClick(PointerEventData e)
  3. 【IPointerEnterHandler】进入:OnPointerEnter
  4. 【IPointerExitHandler】离开:OnPointerExit
  5. 【IPointerDownHandler】按下:OnPointerDown
  6. 【IDragHandler】拖拽:OnDrag
  7. 【IDropHandler】放下:OnDrop
  8. 【IBeginDragHandler / IEndDragHandler】拖拽开始/结束
  9. 【写法示例】
  10. using UnityEngine.EventSystems;
  11. public class ClickTest : MonoBehaviour, IPointerClickHandler { public void OnPointerClick(PointerEventData e) { Debug.Log("点击了我!"); } }
  12. 【注意】脚本挂的 UI 元素需可被射线命中(Image 有 Raycast Target)。
  13. 【EventData】PointerEventData 里有鼠标位置、点击数量等。
  14. 【进阶】IPointerEnter/Exit 常用来做“悬停变色/放大”。
  15. 【UI 事件 vs 按钮】按钮是“预包装”的点击;接口是“自由定制”的事件。
EventSystem + 接口 = 无限 UI 交互:悬停、拖拽、右键、长按都能做。

常见错误与排查

错误:UI 拖拽/点击不响应?
原因:EventSystem 缺失、元素无 Graphic、或 Raycast Target 未勾选
解决:确认 EventSystem 存在;UI 元素有 Image/Text;Graphic 的 Raycast Target 勾选。

动手练习

课后小任务(做出来才算真的学会)

  • 用 IPointerClickHandler 实现点击打印
  • 用 IPointerEnter/Exit 实现悬停变色
  • 说出 EventSystem 三个组件的职责

本节小结

事件系统已掌握。下一课学 Text 文本。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课Canvas 画布与 UI 基础