Unity EventSystem的一些理解和使用

news2024/11/25 10:28:45

Unity的EventSystem是用于处理用户输入和交互的系统。它是Unity UI系统的核心组件之一,可以用于捕捉和分发各种事件,例如点击、拖拽、按键、射线等。

常用的属性和方法有以下这些:

属性:

  • current: 获取当前的EventSystem实例。
  • sendNavigationEvents: 一个布尔值,表示是否发送导航事件。
  • pixelDragThreshold: 拖动的像素阈值。
  • currentInputModule: 获取当前激活的InputModule实例。

方法: 

  • IsPointerOverGameObject(int pointerId): 检查指定的指针事件是否发生在UI元素上。
  • SetSelectedGameObject(GameObject selected): 设置当前选中的游戏对象,默认使用PointerInputModule来处理选中事件。
  • SetSelectedGameObject(GameObject selected, BaseEventData pointer): 设置当前选中的游戏对象,并传递BaseEventData参数。
  • Raycast(PointerEventData eventData, List<RaycastResult> resultAppendList): 执行射线检测并返回与射线相交的最上层的UI元素。

常见用法:

1、 获取当前点击的UI元素:

EventSystem eventSystem = EventSystem.current;
GameObject selectedObject = eventSystem.currentSelectedGameObject;

2、判断鼠标或指定指针是否在UI元素上:

//不带参数,pointerId默认为-1,表示鼠标左键
EventSystem eventSystem = EventSystem.current;
bool isPointerOverUI = eventSystem.IsPointerOverGameObject();

//带参数指定指针
bool isPointerOverUI1 = EventSystem.IsPointerOverGameObject(pointerId);
if (isPointerOverUI1)
{
    // 当前指针在UI上
}

3、设置导航事件的发送:

EventSystem eventSystem = GetComponent<EventSystem>();
eventSystem.sendNavigationEvents = true;

4、设置拖动的像素阈值:

EventSystem eventSystem = GetComponent<EventSystem>();
eventSystem.pixelDragThreshold = 10;

5、当前手指是否触摸在UI上:

EventSystem eventSystem = EventSystem.current;
Touch[] touches = Input.touches;
foreach (Touch touch in touches)
{
    if (eventSystem.IsPointerOverGameObject(touch.fingerId))
    {
        // 当前是否触摸在UI上
    }
}

6、发送自定义事件:

比如我在场景中创建一个组件,如Image并把下面脚本放到组件上,

using UnityEngine;
using UnityEngine.EventSystems;

public class CustomEventHandler : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("你触发了自定义事件");
        // 在这里处理自定义事件的逻辑
    }
}

然后我再创建如下脚本放到场景中:

using UnityEngine;
using UnityEngine.EventSystems;

public class CustomEventTrigger : MonoBehaviour
{
    private void Start()
    {
        // 获取EventSystem实例
        EventSystem eventSystem = EventSystem.current;

        // 获取自定义事件的目标游戏对象
        GameObject targetObject = GameObject.Find("Image");

        // 触发自定义事件
        eventSystem.SetSelectedGameObject(targetObject);
    }
}

当我点击''Image"时就可以触发自定义事件了,如下图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1260414.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业被列入经营异常会有什么后果?

1、工商方面的不良影响 被工商纳入异常吊销营业执照&#xff1a;公司地址异常将会被工商部门纳入经营异常名录&#xff0c;需要及时申请移出&#xff0c;否则会影响正常经营&#xff0c;严重则有被吊销营业执照的风险。 影响企业形象及信誉度&#xff1a;企业间的合作都非常重视…

Linux 内核栈保护

栈保护可以检测栈被写坏的情况。如果怀疑有此类情况&#xff0c;可以将栈保护打开试试 详细可参考文章 栈保护杂记-CSDN博客 栈保护开启 下图是关于strong的解释&#xff0c;在什么情况下会加入栈保护 后面由于gcc版本的原因&#xff0c;好像不支持开启栈保护。后面再进行效果…

数据结构和算法-树和二叉树的定义和基本术语和性质

文章目录 树的基本概念和相关术语相关的应用节点间的关系描述节点&#xff0c;树的属性描述有序树vs无序树树vs森林小结 树的相关性质考点1考点2考点3考点4考点5考点6小结 二叉树的相关概念和基本术语重要 &#xff08;五种状态&#xff09;特殊二叉树小结 二叉树的相关性质二叉…

Java - Stream Filter 多条件筛选过滤

Java Stream流中Filter用于通过设置的条件过滤出元素 &#xff0c;示例如下&#xff1a; List strings Arrays.asList(“abc”, “”, “bc”, “efg”, “abcd”,"", “jkl”);List filtered strings.stream().filter(string -> !string.isEmpty()).collect(C…

220v转5v3.3v稳压芯片WD5201

WD5201是一款高效、低功耗、低成本的220V转5V/3.3V/2.7V稳压芯片&#xff0c;具有高输出精度和宽输入电压范围。它采用了先进的电路设计和制造工艺&#xff0c;具有快速动态响应和优异的负载调节性能。 WD5201采用了SOP-8封装&#xff0c;易于集成和适用于各种智能家电设备。它…

Python实现DDos攻击实例详解

文章目录 SYN 泛洪攻击Scapy3k 基本用法代码实现DDos 实现思路argparse 模块socket 模块代码实现Client 端程序测试后记关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案…

了解静态测试?

静态测试是一种软件测试方法&#xff0c;它主要通过分析软件或代码的静态属性来检查潜在的问题和缺陷&#xff0c;而无需实际执行程序。这种测试方法侧重于检查源代码和其他软件文档&#xff0c;以发现错误并提高软件质量。 为什么要做静态测试&#xff1f; 提前发现和修复错…

使用安卓的IMU数据进行 行人航位推算(PDR)推算步长 附python 代码

加速度计数据、陀螺仪数据、重力传感器数据、姿态仰角数据。 数据分析与定位轨迹生成主要使用Python离线完成。 示意图 show_steps函数:显示垂直方向合加速度与步伐波峰分布 show_gaussian函数:查看数据在一定范围内的分布情况 step_stride函数:步长推算函数 step_counte…

【Python】遍历电脑中的所有文件

通过os模块中的os.walk()遍历电脑指定路径的所有文件及大小&#xff1a; import osdef traverse_files(path):file_path_list[]file_size_list[]for root, dirs, files in os.walk(path):for file in files:file_path os.path.join(root, file)file_path_list.append(file_pa…

探索容灾架构演进之路,从单点到异地多活

1. 挑战与变革 在公司发展初期&#xff0c;业务发展和用户增长是首要关注的焦点。然而&#xff0c;随着业务规模不断扩大&#xff0c;用户数量逐渐攀升&#xff0c;应用稳定性的重要性也变得愈发凸显。在这个演进过程中&#xff0c;传统架构下的应用部署模式开始显露出多方面的…

时间序列预测实战(十九)魔改Informer模型进行滚动长期预测(科研版本,结果可视化)

论文地址-> Informer论文地址PDF点击即可阅读 代码地址-> 论文官方代码地址点击即可跳转下载GIthub链接 个人魔改版本地址-> 文章末尾 一、本文介绍 在之前的文章中我们已经讲过Informer模型了&#xff0c;但是呢官方的预测功能开发的很简陋只能设定固定长度去预测…

Unity中Shader的BRDF解析(二)

文章目录 前言一、回顾一下上一篇的结尾在这里插入图片描述 二、我们来解析一下 UNITY_PBS_USE_BRDF1&#xff08;高配&#xff09;1、迪士尼BRDF原则2、迪士尼的漫反射函数3、参数&#xff1a;perceptualRoughness&#xff08;感性的粗糙度&#xff09;4、参数&#xff1a;hal…

Linux:通过VMWare,定制化Linux系统

一、原理图 二、新增磁盘&#xff08;对应上图sdb盘&#xff09; 三、挂载磁盘 主要是四步&#xff1a;查看磁盘&#xff0c;分区磁盘&#xff0c;格式化磁盘&#xff0c;挂载磁盘 1、查看磁盘 2、分区磁盘 3、格式化磁盘 4、挂载磁盘 创建两个备用目录&#xff0c;用于磁盘…

Rocket mq namesrv源码分析

NameServer 作为注册中心&#xff0c;提供路由注册、路由踢出、路由发现功能&#xff0c;舍弃强一致&#xff0c;保证高可用&#xff0c;集群中各个节点不会实时通讯&#xff0c;其中一个节点下线之后&#xff0c;会提供另外一个节点保证路由功能。 启动入口 org.apache.rock…

鸿蒙应用开发-初见:ArkUI

编程范式&#xff1a;命令式->声明式 以一个卡片的实现做下讲解 命令式 简单讲就是需要开发用代码一步一步进行布局&#xff0c;这个过程需要开发全程参与。 Objective-C UIView *cardView [[UIView alloc] init]; cardView.backgroundColor [UIColor whiteColor]; ca…

文生视频的发展史及其原理解析:从Gen2、Emu Video到SVD、PixelDance

前言 考虑到文生视频开始爆发&#xff0c;比如 今年&#xff0c;作为最早探索视频生成领域的领头羊之一&#xff0c;Runway 先后发布Gen-1、Gen-2 模型(runway也是Stable Diffusion 开发商之一)&#xff0c;特别是Gen-2带来了电影级别的高清晰度&#xff0c;令人瞩目&#xf…

Vue3-pnpm包管理器创建项目

一些优势&#xff1a;比同类工具快2倍左右、节省磁盘空间 官网&#xff1a;pnpm - 速度快、节省磁盘空间的软件包管理器 | pnpm中文文档 | pnpm中文网 npm升级到yarn再升级到pnpm&#xff08;速度更快&#xff09; 安装方式&#xff1a;npm install -g pnpm 创建项目&#…

C++之常用的拷贝和替换算法

C之常用的拷贝和替换算法 copy #include<iostream> using namespace std; #include<vector> #include<algorithm>void Myptint(int val) {cout << val << " "; }void test() {vector<int> v;for (int i 0; i < 10; i){v.pus…

波奇学C++:C++11的新特性

列表初始化 #include<iostream> using namespace std; struct A {int _x;int _y; }; int main() {// 三种方式等价&#xff0c;并且可以省略int x 1;int y { 2 };int z{ 3 };return 0; } {}按声明顺序初始化类成员变量 A p{ 1,2 }; cout << p._x; //1 cout &…

数字化转型导师坚鹏:BLM保险公司数字化转型战略培训圆满结束

在数字化转型背景下&#xff0c;为了落实监管政策《关于保险公司业保险业数字化转型的指导意见》&#xff0c;充分认识到学习保险公司数字化转型战略的价值和重要性&#xff0c;特别举办《2023年保险公司数字化转型战略专题培训班》。为了改变大家的认知&#xff0c;为了拓宽大…