Unity UGUI的EventSystem(事件系统)组件的介绍及使用

1. 什么是EventSystem组件?

EventSystem是Unity UGUI中的一个重要组件,用于处理用户输入事件,如点击、拖拽、滚动等。它负责将用户输入事件传递给合适的UI元素,并触发相应的事件回调函数。

2. EventSystem组件的工作原理

EventSystem组件通过射线检测来确定用户输入事件发生的位置,并将事件传递给最合适的UI元素。它会根据UI元素的层级关系和射线检测结果来确定事件的目标对象。

3. EventSystem组件的常用属性

  • firstSelectedGameObject:设置默认选中的UI元素。
  • sendNavigationEvents:是否发送导航事件。
  • pixelDragThreshold:拖拽事件的像素阈值。
  • currentInputModule:当前使用的输入模块。

4. EventSystem组件的常用函数

  • SetSelectedGameObject(GameObject selected):设置当前选中的UI元素。
  • RaycastAll(PointerEventData eventData, List<RaycastResult> resultAppendList):执行射线检测,并将结果保存到指定的列表中。
  • UpdateModules():更新输入模块。

5. 完整例子代码

例子1:设置默认选中的按钮

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI; public class DefaultButton : MonoBehaviour
{
public Button defaultButton; void Start()
{
EventSystem.current.SetSelectedGameObject(defaultButton.gameObject);
}
}

操作步骤:

  1. 创建一个空物体,并将DefaultButton脚本挂载上去。
  2. 在Inspector面板中将需要默认选中的按钮赋值给defaultButton变量。

例子2:点击按钮触发事件

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI; public class ButtonClick : MonoBehaviour, IPointerClickHandler
{
public void OnPointerClick(PointerEventData eventData)
{
Debug.Log("Button clicked!");
}
}

操作步骤:

  1. 创建一个按钮,并将ButtonClick脚本挂载上去。
  2. 在ButtonClick脚本中实现OnPointerClick函数,并在函数中添加需要执行的代码。

例子3:拖拽物体

using UnityEngine;
using UnityEngine.EventSystems; public class DragObject : MonoBehaviour, IDragHandler
{
public void OnDrag(PointerEventData eventData)
{
transform.position = eventData.position;
}
}

操作步骤:

  1. 创建一个物体,并将DragObject脚本挂载上去。
  2. 在DragObject脚本中实现OnDrag函数,并在函数中修改物体的位置。

例子4:滚动列表

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI; public class ScrollList : MonoBehaviour, IScrollHandler
{
public ScrollRect scrollRect; public void OnScroll(PointerEventData eventData)
{
scrollRect.verticalNormalizedPosition += eventData.scrollDelta.y * 0.1f;
}
}

操作步骤:

  1. 创建一个滚动列表,并将ScrollList脚本挂载上去。
  2. 在ScrollList脚本中实现OnScroll函数,并在函数中修改滚动列表的位置。

例子5:按键导航

using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI; public class Navigation : MonoBehaviour, ISelectHandler
{
public Button nextButton; public void OnSelect(BaseEventData eventData)
{
EventSystem.current.SetSelectedGameObject(nextButton.gameObject);
}
}

操作步骤:

  1. 创建多个按钮,并将Navigation脚本挂载上去。
  2. 在Navigation脚本中实现OnSelect函数,并在函数中设置下一个选中的按钮。

注意事项

  • EventSystem组件只能存在一个,多个EventSystem会导致输入事件无法正常处理。
  • EventSystem组件需要与其他UI组件配合使用,如Button、ScrollRect等。

参考资料

Unity UGUI的EventSystem(事件系统)组件的介绍及使用的更多相关文章

  1. Unity UGUI Layout自动排版组件用法介绍

    Unity UGUI布局组件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...

  2. 关于 Unity UGUI 中修改 Mask 组件下 Image 等子节点组件的材质无效的问题

    前几天同事做了一个效果,希望在原本使用了遮罩组件 Mask 的技能图标(让技能图标变成圆形)上在添加一个置灰的功能,但问题来了:因为是动态根据游戏中玩家的条件才动态置灰,以修改 Mask 下子节点 I ...

  3. Unity UGUI —— 无限循环List

    还记得大学毕业刚工作的时候是做flash的开发,那时候看到别人写的各种各样的UI组件就非常佩服,后来自己也慢慢尝试着写,发现其实也就那么回事.UI的开发其实技术的成分相对来说不算多,但是一个好的UI是 ...

  4. Unity UGUI

    超详细的基础教程传送门:(持续更新中) Unity UGUI之Canvas&EventSystem:http://blog.csdn.net/qq992817263/article/detai ...

  5. Unity5.0 EventSystem事件系统的详细说明

    http://www.manew.com/blog-56596-2917.html?_dsign=53b25d5d unity5.0开发了新的UI系统UGUI,附带的事件系统EventSystem不仅 ...

  6. Unity UGUI鼠标穿透UI问题(Unity官方的解决方法)

    简述 最近在用UGUI的时候遇到了鼠标穿透的问题,就是说在UGUI和3D场景混合的情况下,点击UI区域同时也会 触发3D中物体的鼠标事件.比如下图中 这里给Cube加了一个鼠标点击改变颜色的代码,如下 ...

  7. Unity UGUI图文混排源码(三) -- 动态表情

    这里是根据图文混排源码(二)进一步修改的,其他链接也不贴了,就贴一个链接就好了,第一次看这文章的同学可以先去看看其他几篇文章 Unity UGUI图文混排源码(二):http://blog.csdn. ...

  8. Unity UGUI图文混排源码(二)

    Unity UGUI图文混排源码(一):http://blog.csdn.net/qq992817263/article/details/51112304 Unity UGUI图文混排源码(二):ht ...

  9. Unity UGUI实现图文混排

    目前在unity实现图文混排的好像都是通过自定义字体然后在文本获取字符的位置,用图片替换掉图片标签,这样对于支持英文来说,并没有什么影响.然后对于中文来说就是一个相当麻烦的事了,毕竟图文混排多用于游戏 ...

  10. Unity Jobsystem 详解实体组件系统ECS

    原文摘选自Unity Jobsystem 详解实体组件系统ECS 简介 随着ECS的加入,Unity基本上改变了软件开发方面的大部分方法.ECS的加入预示着OOP方法的结束.随着实体组件系统ECS的到 ...

随机推荐

  1. 笔记:C++学习之旅---IO库

    笔记:C++学习之旅---IO库 C++的输入输出分为三种: (1)基于控制台的I/O (2)基于文件的I/O (3)基于字符串的I/O           练习8.4  编写函数,以读模式打开一个文 ...

  2. C# 获取所有桌面窗口信息

    窗口标题.窗口类名.是否可见.是否最小化.窗口位置和大小.窗口所在进程信息 1 private static WindowInfo GetWindowDetail(IntPtr hWnd) 2 { 3 ...

  3. [OpenCV-Python] 10 图像上的算术运算

    文章目录 OpenCV-Python: 核心操作 10 图像上的算术运算 10.1 图像加法 10.2 图像混合 10.3 按位运算 OpenCV-Python: 核心操作 10 图像上的算术运算 目 ...

  4. ChatGPT最全提示词Prompts总结,看这一篇就够了!

    以下几乎涵盖了各类人群想要使用ChatGPT的所有提示词,需要的朋友可以直接复制粘贴使用. 从翻译到整理耗费超过2个小时,如果内容对大家有帮助,请不要吝啬你们的喜欢.点赞.关注~ ​ 如何正确的提问? ...

  5. 案例:自来水厂项目PM编制问题-检查记录

    1.策划书部分 选择错误.缺失数据 编的太假了 工期对不上.就算按合同实际也没这么长 合同才210天,当然你算上现在可以编远点,但是编合理点 一些瞎编 这瞎编我信了 但是后面空的表是干啥捏?而且数也不 ...

  6. ChatGPT 中文指令指南,教会你如何使用chatgpt实现中文你想要的答案

    ChatGPT 中文指令指南,教会你如何使用chatgpt实现中文你想要的答案 1.学习英语--替代词典 App 场景 例子 Prompts 解释中文英文意思,并解释单词的词根词缀.可以替代词典. 告 ...

  7. 2021-05-24:盛最多水的容器。给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai)

    2021-05-24:盛最多水的容器.给你 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 ...

  8. SpringBoot源码学习4——SpringBoot内嵌Tomcat启动流程源码分析

    系列文章目录和关于我 零丶引入 我在初学spring的时候,很懵逼,因为整个项目中不存在main方法,让我有点摸不着头脑.那时候我知道有个东西叫tomcat是它监听了端口,解析了协议调到了我的serv ...

  9. Selenium - 浏览器配置(2) - 浏览器默认下载路径设置

    Selenium - 浏览器配置 浏览器下载路径设置 我们默认使用谷歌浏览器下载文件的时候,总会弹出窗口指定文件下载路径: 但是selenium不能对浏览器窗口以外的窗口做操作: 可以在谷歌配置信息中 ...

  10. 天下苦 Spring 久矣,Solon v2.2.20 发布

    Solon 是什么框架? 一个,Java 新的生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态.与其他框架相比,它解决了两个重要的痛点:启动慢,费资源. 解决痛点? 由于Solon Be ...