当前位置: 首页 > 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) => {//当鼠标在非按钮物体按下,需要进行的操作  });}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SQL-窗口函数合集
  • 对抗攻击论文阅读—AAAI2022—CMUA-Watermark
  • 【DevOps】开源的sd-wan软件介绍和对比分析
  • 【算法训练记录——Day28】
  • 大模型:分本分割模型
  • 问题:棕色试剂瓶用于盛装见光易分解的试剂或溶剂。 #其他#学习方法#微信
  • 使用Python多线程批量压缩图片文件
  • 23种设计模式之组合模式
  • 什么是电脑监控软件?六款知名又实用的电脑监控软件
  • ONLYOFFICE协作空间与Drupal如何集成
  • 嵌入式学习——Linux高级编程复习(网络编程)——day42
  • 聊聊C/S模式架构的优缺点
  • 掌握Excel字符串拼接
  • RabbitMQ-topic exchange使用方法
  • NLP——电影评论情感分析
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • CAP理论的例子讲解
  • E-HPC支持多队列管理和自动伸缩
  • idea + plantuml 画流程图
  • java8-模拟hadoop
  • java中具有继承关系的类及其对象初始化顺序
  • jdbc就是这么简单
  • Laravel Telescope:优雅的应用调试工具
  • Redis的resp协议
  • webgl (原生)基础入门指南【一】
  • 半理解系列--Promise的进化史
  • 浮现式设计
  • 机器学习 vs. 深度学习
  • 坑!为什么View.startAnimation不起作用?
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 目录与文件属性:编写ls
  • 字符串匹配基础上
  • (办公)springboot配置aop处理请求.
  • (纯JS)图片裁剪
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (十五)使用Nexus创建Maven私服
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (正则)提取页面里的img标签
  • (转)Sublime Text3配置Lua运行环境
  • (转)母版页和相对路径
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • .gitignore文件设置了忽略但不生效
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net 设置默认首页
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET基础篇——反射的奥妙
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET企业级应用架构设计系列之技术选型
  • .net项目IIS、VS 附加进程调试