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. flume组件以及通过命令监控大数据平台转态

    实验一.Flume 组件安装配置 1.下载和解压 Flume 可 以 从 官 网 下 载 Flume 组 件 安 装 包 , 下 载 地 址 如 下 URL 链 接 所 示 https://archi ...

  2. [Pytorch框架] 4.2.1 使用Visdom在 PyTorch 中进行可视化

    文章目录 4.2.1 使用Visdom在 PyTorch 中进行可视化 安装 坑 基本概念 Environments Panes VIEW 可视化接口 使用 绘制简单的图形 更新损失函数 import ...

  3. 禁用Chrome浏览器Websocket

    前言:最近遇到关于Websocket的相关测试,推荐一个禁用Chrome浏览器Websocket的扩展插件 一.下载使用 1.https://github.com/arthepsy/chrome-di ...

  4. [ZJOI2020] 序列 线性规划做法/贪心做法

    线性规划做法 同时也作为线性规划对偶的一个小小的学习笔记. 以下 \(\cdot\) 表示点积,\(b,c,x,y\) 是行向量. \(A\) 是矩阵,对于向量 \(u,v\) 若 \(\forall ...

  5. 「微服务」这10道Consul面试题值得一看

    前言 Consul 是一种非常强大的分布式服务发现和配置管理工具,它可以帮助开发人员和运维人员更好地管理和维护分布式系统. 但是,使用 Consul 也需要投入一定的人力和物力,需要根据实际情况进行选 ...

  6. 【HTML-CSS】div中加入icon后input标签占用不满问题

    做登录表单时遇到了一个宽度控制不好的问题,放入图标后,input框总是无法正确的填满剩余空间(尺寸过大/过小) 原因是input元素和父元素div宽度都写死的问题 把父元素的高度删除,宽度改成max- ...

  7. 2023-03-10:YUV420P像素数据编码为JPEG图片,请用go语言实现。

    2023-03-10:YUV420P像素数据编码为JPEG图片,请用go语言实现. 答案2023-03-10: 方法一.使用 github.com/moonfdd/ffmpeg-go 库,基于雷霄骅的 ...

  8. from . import XXX

    [Python]from . import XXX 一. 官方文档 sound/ __init__.py  formats/ __init__.py wavread.py wavwrite.py ai ...

  9. OpenStack云平台部署

    前言:本次部署采用系统的是Centos 8-Stream版,存储库为OpenStack-Victoria版,除基础配置,五大服务中的时间同步服务,七大组件中的nova服务,neutron服务,cind ...

  10. 【GiraKoo】Android Studio调试时,提示port无法打开

    Android Studio调试时,提示port无法打开 现象描述 在Android Studio在进行调试时,无法正常运行.App闪退. IDE提示: Error running 'app': Un ...