当前位置: 首页 > news >正文

unity中通过实现底层接口实现非按钮(图片)的事件监听

编写监听脚本 PEListenter

  • 继承自MonoBehaviour类,并实现了IPointerDownHandlerIPointerUpHandlerIDragHandler接口,按照需求定义需要接收事件(鼠标按下、抬起、拖拽)的回调函数
//监听类(需要挂载在物体上面)
public class PEListenter : MonoBehaviour, IPointerDownHandler,IPointerUpHandler,IDragHandler
{//存储点击,抬起,拖拽事件的回调public Action<PointerEventData> onClickDown;public Action<PointerEventData> onClickUp;public Action<PointerEventData> onDrag;//OnPointerDown方法在用户按下鼠标时被调用,它接收一个PointerEventData参数,//可以通过该参数获取有关鼠标点击事件的信息。//当鼠标拖动时,Unity将调用此方法。它检查onClickDown回调函数是否为null,不为空,则调用回调并传递eventData参数。public void OnPointerDown(PointerEventData eventData){if (onClickDown != null){onClickDown(eventData);}}//OnPointerUp方法在用户抬起鼠标时被调用public void OnPointerUp(PointerEventData eventData){if (onClickUp != null){onClickUp(eventData);}}//OnDrag方法在用户拖动鼠标时被调用public void OnDrag(PointerEventData eventData){if (onDrag != null){onDrag(eventData);}}
}

操作函数封装

  • 这段代码是一个用于获取或添加组件的方法 GetOrAddComponect<T>(GameObject go) 和一个封装点击事件的方法 OnClickDown(GameObject go, Action<PointerEventData> cb)

 protected T GetOrAddComponect<T>(GameObject go)where T : Component{T t = go.GetComponent<T>();if (t == null){t = go.AddComponent<T>();}return t;}//各类点击事件的封装protected void OnClickDown(GameObject go,Action<PointerEventData> cb){
//调用GetOrAddComponect函数对go物体进行脚本添加,并赋值给实例化listener
//为listener内的点击事件传入回调函数PEListenter listener = GetOrAddComponect<PEListenter>(go);listener.onClickDown = cb;}protected void OnClickUp(GameObject go, Action<PointerEventData> cb){//只有点击挂载了PEClicke脚本的物体才有鼠标事件的数据PEListenter listener = GetOrAddComponect<PEListenter>(go);listener.onClickUp = cb;}protected void OnDrag(GameObject go, Action<PointerEventData> cb){//只有点击挂载了PEClicke脚本的物体才有鼠标事件的数据PEListenter listener = GetOrAddComponect<PEListenter>(go);listener.onDrag = cb;}
  • GetOrAddComponect<T>(GameObject go) 方法的目的是为了获取指定游戏对象 go 上的一个特定类型的组件 T,如果该组件不存在,则会自动添加该组件到游戏对象上。这个方法使用了泛型 <T>,使得可以动态地传入不同类型的组件。该方法返回类型为 T 的组件。

    • T:表示一个继承自 Component 类的类型,这样确保传入的类型是一个组件类型
    • go:表示要获取或添加组件的游戏对象。
  • OnClickDown(GameObject go, Action<PointerEventData> cb) 方法是一个封装了点击事件的方法,它接受两个参数:

    • go:表示要绑定点击事件的游戏对象。
    • cb:表示点击事件发生时要执行的回调函数,它接受一个 PointerEventData 参数,通常用于处理点击事件的具体逻辑
  • OnClickDown 方法内部,首先调用了 GetOrAddComponect<PEListenter>(go) 方法获取或添加了一个名为 PEListenter 的组件,并将返回的 PEListenter 实例赋值给 listener 变量。然后,将传入的点击事件回调函数 cb 赋值给 listener 实例的 onClickDown 委托,这样当点击事件发生时,就会执行这个回调函数。 

具体函数调用

 public void RegisterTouchEvts(){//鼠标按下,轮盘位置改变,点出现,记录鼠标开始位置//imgTouch是需要事件监听的非按钮物体OnClickDown(imgTouch.gameObject, (PointerEventData evt) =>{//当鼠标在非按钮物体按下,需要进行的操作    });//鼠标抬起,轮盘位置恢复,点隐藏OnClickUp(imgTouch.gameObject, (PointerEventData evt) => {//当鼠标在非按钮物体按下,需要进行的操作  });//拖拽,设置点的位置,在40范围内以及超出40OnDrag(imgTouch.gameObject, (PointerEventData evt) => {//当鼠标在非按钮物体按下,需要进行的操作  });}

相关文章:

unity中通过实现底层接口实现非按钮(图片)的事件监听

编写监听脚本 PEListenter 继承自MonoBehaviour类&#xff0c;并实现了IPointerDownHandler、IPointerUpHandler和IDragHandler接口&#xff0c;按照需求定义需要接收事件&#xff08;鼠标按下、抬起、拖拽&#xff09;的回调函数 //监听类&#xff08;需要挂载在物体上面&am…...

重庆耶非凡科技有限公司的选品师项目加盟靠谱吗?

在当今电子商务的浪潮中&#xff0c;选品师的角色愈发重要。而重庆耶非凡科技有限公司以其独特的选品师项目&#xff0c;在行业内引起了广泛关注。对于想要加盟该项目的人来说&#xff0c;项目的靠谱性无疑是首要考虑的问题。 首先&#xff0c;我们来看看耶非凡科技有限公司的背…...

《青少年编程与数学》课程方案:4、课程策略

《青少年编程与数学》课程方案&#xff1a;4、课程策略 一、工程师思维二、使命感驱动三、价值观引领四、学习现代化五、工作生活化六、与时代共进 《青少年编程与数学》课程策略强调采用工程师思维&#xff0c;避免重复造轮子&#xff0c;培养使命感&#xff0c;通过探索兴趣、…...

用爬虫实现---模拟填志愿

先来说实现逻辑&#xff0c;首先我要获取到这个网站上所有的信息&#xff0c;那么我们就可以开始对元素进行检查 我们发现他的每一个学校信息都有一个对应的属性&#xff0c;并且是相同的&#xff0c;那么我们就可以遍历这个网页中的所有属性一样的开始爬取 在来分析&#xff0…...

vscode Run Code输出出现中文乱码情况问题解决方案

主要解决方案是通过修改计算机默认的编码格式,来完成的。 chcp 是 Windows 操作系统中的一个命令,用于显示或设置控制台的代码页(code page)。代码页决定了控制台如何解释和显示字符,特别是非 ASCII 字符(例如 Unicode 字符)。 使用方法 显示当前代码页: 输入 chcp 而…...

代码随想录训练营Day30

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、重新安排行程 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 今天是跟着代码随想录刷题的第30天&#xff0c;主要是复习了回溯算法…...

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二)

概览 在上篇 Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)博文中,我们讨论了 Swift 语言中序列和集合元素排序的一些基本知识,我们还给出了以自定义类型中任意属性排序的“康庄大道”。 不过在实际的撸码场景中,我们往往需要的是“多属性”同时参与到排序的考…...

STM32F103C8T6基于HAL库移植uC/OS-III

文章目录 一、建立STM32CubeMX工程二、移植1、 uC/OS-III源码2、移植过程 三、配置相关代码1、bsp.c和bsp.h2、main.c3、修改启动代码4、修改app_cfg.h文件5、修改includes.h文件6、修改lib_cfg.h文件 四、编译与烧录总结参考资料 学习嵌入式实时操作系统&#xff08;RTOS&…...

微服务学习Day9-分布式事务Seata

文章目录 分布式事务seata引入理论基础CAP定理BASE理论 初识Seata动手实践XA模式AT模式TCC模式SAGA模式 高可用 分布式事务seata 引入 理论基础 CAP定理 BASE理论 初识Seata 动手实践 XA模式 AT模式 TCC模式 Service Slf4j public class AccountTCCServiceImpl implements A…...

vue用vite配置代理解决跨域问题(target、rewrite和changeOrigin的使用场景)

Vite的target、rewrite和changeOrigin的使用场景 1. target 使用场景&#xff1a;target 属性在 Vite 的 vite.config.ts 或 vite.config.js 文件的 server.proxy 配置中指定&#xff0c;用于设置代理服务器应该将请求转发到的目标地址。这通常是一个后端服务的API接口地址。…...

为什么PPT录制没有声音 电脑ppt录屏没有声音怎么办

一、为什么PPT录制没有声音 1.软件问题 我们下载软件的时候可能遇到软件损坏的问题&#xff0c;导致录制没有声音&#xff0c;但其他功能还是可以使用的。我建议使用PPT的隐藏功能&#xff0c;下载插件&#xff0c;在PPT界面的加载项选项卡中就能使用。我推荐一款可以解决录屏…...

JDBC学习笔记(三)高级篇

一、JDBC 优化及工具类封装 1.1 现有问题 1.2 JDBC 工具类封装 V1.0 resources/db.properties配置文件&#xff1a; driverClassNamecom.mysql.cj.jdbc.Driver urljdbc:mysql:///atguigu usernameroot password123456 initialSize10 maxActive20 工具类代码&#xff1a; p…...

c++编译器在什么情况下会提供类的默认构造函数等,与析构函数

我们都知道&#xff0c;在 c 里&#xff0c;编写的简单类&#xff0c;若没有自己编写构造析构函数与 copy 构造函数 与 赋值运算符函数&#xff0c;那么编译器会提供这些函数&#xff0c;并实现简单的语义&#xff0c;比如成员赋值。看 源码时&#xff0c;出现了下图类似的情形…...

SpringBoot3整合Mybatis-Plus3.5.5出现的问题

主要是由于 mybatis-plus 中 mybatis 的整合包版本不够导致的 排除 mybatis-plus 中自带的 mybatis 整合包&#xff0c;单独引入即可 java.lang.IllegalArgumentException: Invalid value type for attribute factoryBeanObjectType: java.lang.Stringat org.springframework.…...

服务器数据恢复—强制上线raid5阵列离线硬盘导致raid不可用的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌2850服务器中有一组由6块SCSI硬盘组建的raid5磁盘阵列&#xff0c;linux操作系统ext3文件系统。 服务器故障&#xff1a; 服务器运行过程中突然瘫痪。服务器管理员检查阵列后发现raid5阵列中有两块硬盘离线&#xff0c;将其中一块硬盘进行…...

初入阿里云,上手走一波

初入阿里云&#xff0c;上手走一波 一阶&#xff1a;ECSMysqlDMS安装Mysql初始化MysqlMysql操作DMS管理Mysql 二阶&#xff1a;ECSOSS远程连接ECSOSS控制台其他图片服务 三阶&#xff1a;更多搭配操作 可以说个人在日常使用过程中&#xff0c;操作最多的阿里云产品就是阿里云服…...

[C++] 小游戏 斗破苍穹 2.2.1至2.11.5所有版本(中) zty出品

目录 2.8.2 2.9.1 2.10.1 2.10.2 2.10.3 2.10.4 2.10.5 2.8.2 #include<stdio.h> #include<iostream> #include<ctime> #include<bits/stdc.h> #include<time.h> //suiji #include<windows.h> //SLEEP函数 using namespace std; st…...

Javaweb---HTTPS

题记 为了保护数据的隐私性我们引入了HTTPS 加密的方式都有那些呢? 1.对称加密: 加密和解密使用的密钥是同一个密钥 2.非对称加密:有两个密钥(一对),分为公钥和私钥(公钥是公开的,私钥是要藏好的) HTTPS的工作过程(旨在对body和header进行加密) 1.对称加密 上述引出的…...

[已解决]ESP32-C3上传程序成功但没有反应的问题

ESP32-C3上传程序成功但没有反应的问题 ESP32-C3是一款功能强大的微控制器&#xff0c;常用于物联网&#xff08;IoT&#xff09;应用的开发和原型设计。然而&#xff0c;有时候在上传程序成功后&#xff0c;设备却没有任何反应&#xff0c;十分让人费解。通过各种尝试已解决这…...

使用 OCLint进行静态代码分析:一个完整的配置示例

文章目录 0. 概述1. 安装 oclint2. oclint配置文件3. 脚本详解3.1 禁用的规则列表3.2 需要启用的规则代码风格代码复杂性命名规范性能安全性其他 4. 检测执行1. 使用 CMake 生成 compile_commands.json2. 运行 Oclint 0. 概述 OCLint是一个静态代码分析工具&#xff0c;通过词…...

【Linux】线程的互斥

一、进程线程间的互斥相关的背景概念 临界资源&#xff1a;多线程执行流共享的资源就叫做临界资源临界区&#xff1a;每一个线程内部&#xff0c;访问临界资源的代码&#xff0c;就叫做临界区互斥&#xff1a;任何时刻&#xff0c;互斥保证有且只有一个执行流进入临界区&#…...

electron如何让你窗口总是显示在最前面【mac解决全屏窗口alwaysOnTop参数不起作用】

你创建了一个使用Electron框架的应用程序,并希望它在以下情况下始终保持可见: 在切换工作区(桌面)时可见在其他应用程序之上显示当其他应用程序全屏显示时,它也显示在顶部当Keynote处于演示模式时,它也能显示在顶部 特别是当Keynote处于演示模式时,要实现这一点比较困难…...

XR和Steam VR项目合并问题

最近有一个项目是用Steam VR开发的&#xff0c;里面部分场景是用VRTK框架做的&#xff0c;还有一部分是用SteamVR SDK自带的Player预制直接开发的。 这样本身没有问题&#xff0c;因为最终都是通过SteamVR SDK处理的&#xff0c;VRTK也管理好了SteamVR的逻辑&#xff0c;并且支…...

uni-app:利用Vue的原型对象Vue.prototype设置全局方法及其引用

一、在main.js中设置方法checkPermission绑定到Vue.prototype 核心代码 Vue.prototype.$checkPermission function(username) {console.log(Checking permission for:, username); }; 完整代码 import App from ./App// 添加 checkPermission 方法到 Vue.prototype 上,检查…...

django接入djangorestframework-simplejwt步骤

版本&#xff1a;django 4.2 python: 3.8 安装 pip install djangorestframework-simplejwtuser子应用models.py文件 from django.db import models from django.contrib.auth.models import AbstractUserclass User(AbstractUser):mobile models.CharField(max_length11, u…...

前端工程化工具系列(十)—— Browserslist:浏览器兼容性配置工具

Browserslist 是一个能够在不同的前端工具间共享目标浏览器的配置&#xff0c;各工具根据该配置进行代码转译等操作。 具体的这些前端工具为&#xff1a;Autoprefixer、Babel、postcss-preset-env、eslint-plugin-compat、stylelint-no-unsupported-browser-features、postcss-…...

双列集合底层源码

tips: 竖着的箭头&#xff1a;重写 横着的箭头&#xff1a;继承...

【Ardiuno】实验使用ESP32连接Wifi(图文)

ESP32最为精华和有特色的地方当然是wifi连接&#xff0c;这里我们就写程序实验一下适使用ESP32主板连接wifi&#xff0c;为了简化实验我们这里只做了连接部分&#xff0c;其他实验在后续再继续。 由于本实验只要在串口监视器中查看结果状态即可&#xff0c;因此电路板上无需连…...

优化家庭网络,路由器无线中继配置全攻略(中兴E1600无线中继设置/如何解决没有预埋有线网络接口的问题/使用闲置路由实现WIFI扩展)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 网络优化 📒📒 操作步骤 📒💡适用场景🚨 常见问题及解决方案⚓️ 相关链接 ⚓️📖 介绍 📖 在现代家庭生活中,WiFi已经渗透到我们生活的每一个角落,成为了日常生活中不可或缺的一部分。然而,不少用户常常遇到W…...

【ArcGIS微课1000例】0114:基于DEM地形数据整体抬升或下降高程

相关阅读:【GlobalMapper精品教程】083:基于DEM整体抬升或下降地形高程的两种方式 文章目录 一、任务分析二、栅格计算器简介三、地形整体修改四、注意事项一、任务分析 打开软件,加载配套实验数据中的0112.rar中的dem数据,如下所示,dem的高程范围为256.75~342.37米,现在…...

大型网站故障/吉林seo基础知识

Elasticsearch的删除也是很灵活的&#xff0c;下次我再介绍&#xff0c;DeleteByQuery的方式。今天就先介绍一个根据ID删除。上代码。 package com.sojson.core.elasticsearch.manager; import org.elasticsearch.action.delete.DeleteResponse; import com.sojson.common.mo…...

90设计网站真实稿费/如何做免费网站推广

在真正的生产大数据环境中&#xff0c;存储管理是DBA的主要工作之一&#xff0c;比如生产系统上表空间的监控&#xff0c;当一个表空间满或者使用率过高时&#xff0c;可能需要DBA添加一块磁盘到操作系统中&#xff0c;然后再在新加的磁盘上添加数据文件。如果这个操作作用的环…...

网站源码制作/百度联盟怎么加入赚钱

从十二星座分布图来看&#xff0c;我们不同星座位于不同的位置&#xff08;废话&#xff09;&#xff0c;所以我们夏天旅游也要去不同的地方&#xff01;要去就要去符合我们气场的地方&#xff0c;舒服。 这有关系吗&#xff1f;&#xff1f;&#xff1f;你又在骗我&#xff01…...

商品列表html模板/珠海seo关键词排名

UDP时间更新服务程序 http://qzher.com/?p647 网络编程,最好采用两台电脑, 或者一台电脑,再开个虚拟机,虚拟机采用网络桥接模式 特点: 发消息方一直向指定IP发送报时消息 收方一上线就能得到发来的即时消息 (未上线的消息全被抛弃) 若收方上线期间, 发消息方关闭, 收方也一直…...

同城做鸭网站/电商网站对比

1.AIDL定义 AIDL是android interface definition language的缩写&#xff0c;它对android IPC组件Binder进行了封装。使用它不需理会底层IPC的实现&#xff0c;只需要简单的定义接口&#xff0c;然后ADT编译生成IPC需要的java文件。极大的方便了开发者和提升了开发的速度及规范…...

优秀网站建设哪家便宜/seo在线优化技术

什么是IPython&#xff1f;可能很多人已经在用&#xff0c;却不知道它到底是什么。 根据维基百科的解释&#xff1a;IPython是一种基于Python的交互式解释器&#xff0c;提供了强大的编辑和交互功能。IPython拥有&#xff1a;满足你各种需求的交互式shell火爆数据科学社区的Jup…...