【Unity】IBeginDragHandler、IDragHandler 和 IEndDragHandler 介绍
IBeginDragHandler、IDragHandler 和 IEndDragHandler 介绍
IBeginDragHandler、IDragHandler 和 IEndDragHandler 是 Unity 引擎中的三个接口,用于处理 UI 元素的拖放事件。这些接口通常结合使用,构成了 Unity 引擎的拖放事件系统。
IBeginDragHandler 用于处理开始拖动 UI 元素时的事件。
IDragHandler 用于处理 UI 元素被拖动时的事件。
IEndDragHandler 用于处理结束拖动 UI 元素时的事件。
在使用这些接口时,开发人员需要自己实现接口中的方法,并编写自己的逻辑来处理拖放事件。
IBeginDragHandler
方法
void OnBeginDrag(PointerEventData eventData)
eventData:拖动事件的数据。
举例子
例子 1:记录拖动开始时元素的位置
using UnityEngine;
using UnityEngine.EventSystems;public class DragHandler : MonoBehaviour, IBeginDragHandler
{private Vector3 startPosition;public void OnBeginDrag(PointerEventData eventData){startPosition = transform.position;}
}
在这个例子中,当开始拖动元素时,记录元素的初始位置。PointerEventData 参数包含了拖动事件的相关数据,例如鼠标的位置、拖动的元素等。
例子 2:在拖动开始时显示一个辅助的拖动对象
using UnityEngine;
using UnityEngine.EventSystems;public class DragHandler : MonoBehaviour, IBeginDragHandler
{public GameObject dragObjectPrefab;private GameObject dragObject;public void OnBeginDrag(PointerEventData eventData){dragObject = Instantiate(dragObjectPrefab);dragObject.transform.position = eventData.position;}
}
在这个例子中,当开始拖动元素时,实例化一个辅助的拖动对象,并将其位置设置为鼠标的位置。这个辅助对象可以用于显示一个拖动的副本或者用于在拖动时显示一些提示信息。
IDragHandler
方法
void OnDrag(PointerEventData eventData)
eventData:拖动事件的数据。
举例子
例子 1:移动元素的位置
using UnityEngine;
using UnityEngine.EventSystems;public class DragHandler : MonoBehaviour, IDragHandler
{public void OnDrag(PointerEventData eventData){transform.position = eventData.position;}
}
在这个例子中,当元素被拖动时,将元素的位置设置为鼠标的位置。这样,拖动元素时就可以实现元素的移动。
例子 2:限制元素的移动范围
using UnityEngine;
using UnityEngine.EventSystems;public class DragHandler : MonoBehaviour, IDragHandler
{public Vector2 minPosition;public Vector2 maxPosition;public void OnDrag(PointerEventData eventData){Vector2 newPosition = eventData.position;newPosition.x = Mathf.Clamp(newPosition.x, minPosition.x, maxPosition.x);newPosition.y = Mathf.Clamp(newPosition.y, minPosition.y, maxPosition.y);transform.position = newPosition;}
}
在这个例子中,当元素被拖动时,根据设置的最小和最大位置限制元素的移动范围。这样,拖动元素时就可以实现元素在限定范围内的移动。
IEndDragHandler
方法
void OnEndDrag(PointerEventData eventData)
eventData:拖动事件的数据。
举例子
例子 1:记录拖动结束时元素的位置
using UnityEngine;
using UnityEngine.EventSystems;public class DragHandler : MonoBehaviour, IEndDragHandler
{private Vector3 endPosition;public void OnEndDrag(PointerEventData eventData){endPosition = transform.position;}
}
在这个例子中,当元素拖动结束时,记录元素的位置。这个位置可以用于后续的处理,例如判断元素是否放置在了指定的位置上。
例子 2:拖动结束时销毁辅助的拖动对象
using UnityEngine;
using UnityEngine.EventSystems;public class DragHandler : MonoBehaviour, IEndDragHandler
{private GameObject dragObject;public void OnEndDrag(PointerEventData eventData){Destroy(dragObject);}
}
在这个例子中,当元素拖动结束时,销毁之前创建的辅助的拖动对象。这样可以在拖动结束后清理一些临时的对象或者状态。
相关文章:
【Unity】IBeginDragHandler、IDragHandler 和 IEndDragHandler 介绍
IBeginDragHandler、IDragHandler 和 IEndDragHandler 介绍 IBeginDragHandler、IDragHandler 和 IEndDragHandler 是 Unity 引擎中的三个接口,用于处理 UI 元素的拖放事件。这些接口通常结合使用,构成了 Unity 引擎的拖放事件系统。 IBeginDragHandler…...
杰发科技AC7801——Flash模拟EEP内存分布情况
简介 本文记录了在使用AutoChips芯片Flash模拟EEP过程中的一些理解 核心代码如下 #include <stdlib.h> #include "ac780x_sweeprom.h" #include "ac780x_debugout.h"#define SWEEPROM_SIZE (2048UL) /* Ssoftware eeprom size(Byte) */ #define TE…...
【前端知识】Node——http模块url模块的常用操作
一、创建简易Server const http require(http); const URL require(url);const HTTP_PORT 8088;const server http.createServer((req, res) > {// req:request请求对象,包含请求相关的信息;// res:response响应对象&…...
平衡二叉树 (简单易懂)
目录 一、概念 二、性质 三、插入操作 四、旋转操作 五、删除操作 六、代码实现 七、复杂度 一、概念 平衡二叉树(Balanced Binary Tree)是一种特殊的二叉搜索树(Binary Search Tree,BST),它在插入和…...
Vue.observable 是什么
Observable 翻译过来我们可以理解成可观察的 Vue.js2.6 新增 Vue.observable,让一个对象变成响应式数据。Vue 内部会用它来处理 data 函数返回的对象 。 返回的对象可以直接用于渲染函数和计算属性内,并且会在发生变更时触发相应的更新。也可以作为最小化…...
【五年创作纪念日】
机缘 我成为创作者的过程并不复杂,可以说是一个自然的发展。我是一名软件工程师,日常的工作主要是编程和解决问题。在工作的过程中,我发现有很多时候我需要查找一些特定的技术问题或者寻找一些最佳实践来解决我遇到的问题。在这个过程中&…...
数据库基础入门 — SQL排序与分页
我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 本…...
WordPress站点屏蔽过滤垃圾评论教程(Akismet反垃圾评论插件)
前段时间我的WordPress站点经常收到垃圾评论的轰炸,严重时一天会收到几十条垃圾评论。我这个小破站一没啥流量,二又不盈利,实在是不太理解为啥有人要这么执着地浪费资源在上面。 Akismet反垃圾评论插件 其实用了 Akismet 反垃圾评论插件后&a…...
Modbus-RTU协议讲解与实战
1、背景 工作需要,需要使用Modbus-RTU实现RS485通信,于是简单学习并实践了一下。 2、参考资料 一文看懂Modbus协议 3、协议说明 3.1、协议类型 当前设备采用Modbus-RTU协议,采用CRC-16_Modbus校验算法,数据链路层使用用标准串口协议,物理层采用RS485进行数据传输。 …...
数据结构 查找基本概念
敬请期待。。。 1. 适用于折半查找的表的存储方式及元素排列要求为(顺序方式存储,元素有序 )。 2. 有一个按元素值排好序的顺序表(长度大于2),分别用顺序查找和折半查找与给定值相等的元素,比较次数分别是s和b&am…...
『Linux升级路』基础开发工具——gcc/g++篇
🔥博客主页:小王又困了 📚系列专栏:Linux 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、快速认识gcc/g 二、预处理 📒1.1头文件展开 📒1…...
面试:RocketMQ相关问题
文章目录 什么是 RocketMQ,有哪些使用场景?RocketMQ 由哪些⻆色组成,每个⻆色作用和特点是什么?RocketMQ 中的 Topic 和 JMS 的 queue 有什么区别?RocketMQ 消费模式有几种?RocketMQ 的 Consumer 是如何消费…...
2304. 网格中的最小路径代价 : 从「图论最短路」过渡到「O(1) 空间的原地模拟」
题目描述 这是 LeetCode 上的 「2304. 网格中的最小路径代价」 ,难度为 「中等」。 Tag : 「最短路」、「图」、「模拟」、「序列 DP」、「动态规划」 给你一个下标从 0 开始的整数矩阵 grid,矩阵大小为 m x n,由从 0 到 的不同整数组成。 你…...
【机器学习】算法性能评估常用指标总结
考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被 预测成正类,即为真正类(True positive࿰…...
前端 JavaScript 与 HTML 怎么实现交互?
前端的交互性是通过JavaScript与HTML结合实现的。JavaScript作为一种脚本语言,可以嵌入HTML中,通过对DOM(文档对象模型)的操作,实现与用户的交互。以下将详细介绍前端JavaScript与HTML如何实现交互,包括事件…...
命令执行总结
之前做了一大堆的题目 都没有进行总结 现在来总结一下命令执行 我遇到的内容 这里我打算按照过滤进行总结 依据我做过的题目 过滤system 下面是一些常见的命令执行内容 system() passthru() exec() shell_exec() popen() proc_open() pcntl_exec() 反引号 同shell_exec() …...
机器学习——词向量模型(CBOW代码实现-未开始)
本来是不打算做这个CBOW代码案例的,想快马加鞭看看前馈神经网络 毕竟书都买好了 可是…可是…我看书的时候,感觉有点儿困难,哭的很大声… 感觉自己脑细胞可能无法这么快接受 要不,还是退而求个稍微难度没那么大的事,想…...
智慧海岛/海域方案:助力海洋空间智慧化、可视化管理
随着我国海洋经济的快速发展,海域海岛的安防技术也获得了进步。传统的安防监控模式已经满足不了海域海岛的远程监管需求。伴随着人工智能、边缘计算、大数据、通信传输技术、视频技术、物联网等信息化技术的发展,海岛海域在监管手段上,也迎来…...
Bin、Hex、ELF、AXF的区别
1.Bin Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code,内部没有地址标记。Bin是直接的内存映象表示,二进制文件大小即为文件所包含的数据的实际大小。 BIN文件就是直接的二进制文件&…...
IDEA安装教程
文章目录 1 下载IntelliJ IDEA2 安装3 IDEA配置4 创建项目 1 下载IntelliJ IDEA 官方网站上下载最新版本的IntelliJ IDEA。官方网站提供了两个版本:Community版和Ultimate版。 Community版是免费的,适用于个人和非商业用途。Ultimate版则需要付费购…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
