UI:PointerEventData
2024-10-19 17:33:02
原因:判断是否将一个UI物体拖放到另一个UI物体上面。
1.拖拽实现可以直接用EventTrigger组件或者自己实现拖拽事件的接口完成;
2.在OnDrag方法中借助PointEventData事件进行检测;
3.关于PointEventData的介绍,参考博文:https://blog.csdn.net/qq_41056203/article/details/84875282;
4.这次检测主要是靠PointEventData中的pointerEnter属性完成,该属性会返回鼠标滑入的UI物体,返回值为GameObject;
5.由4可知需要检测鼠标的划入事件,就需要有Image的raycastTarget属性,raycastTarget代表是否接收UI事件;
6.当实现拖动时,将自身的Image.raycastTarget设为false。
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(Image))]//属性,会给挂在该脚本的UI强制添加Image组件,且在没有移除该脚本时,不能移除Image组件
public class CustomDrag : MonoBehaviour,IDragHandler,IEndDragHandler,IBeginDragHandler//I开头的为拖拽事件的接口,这选择实现接口的方法实现拖拽
{
private Image myImg;//获取自身的Image组件,在拖动时将raycastTarget设为false
public void OnDrag(PointerEventData eventData)//拖动时触发的函数,实时触发
{
print("OnDrag");
Debug.Log(eventData.pointerEnter);//pointerEnter代表鼠标进入到的UI物体
}
public void OnEndDrag(PointerEventData eventData)//拖动结束时触发的函数,触发一次
{
print("OnEndDrag");
myImg.raycastTarget = true;
}
void IBeginDragHandler.OnBeginDrag(PointerEventData eventData)//拖动开始触发的函数,触发一次,需要将自身的raycastTarget设为true。
{
print("OnBeginDrag");
myImg = transform.GetComponent<Image>();
}
}
这里要说一下,这里只是简单实现拖动函数,没有实现拖拽时物体跟随,自己可以凭想法添加自己想要实现的效果,还有就是之所以要将raycastTarget设为false就是当物体拖拽跟随时,会阻挡下面的物体接收鼠标事件。
1.将拖拽事件脚本挂到目标物体上
目标物体上记得要有Image组件,可以试试将Text上的Ratcast Target属性打开试试。
最新文章
- 使用WCF对外提供接口
- Indigo Studio
- 让 BAT 的 Offer 不再难拿
- 简单风格 在线音乐播放器(支持wav,MP3等)
- aspx页面状态管理(查询字符串Request与Application)
- Linux系统swap已分区但无法挂载与cryptswap1问题
- Android 每隔3s更新一次title
- 【2017-06-05】Jquery.ajax
- 从壹开始微服务 [ DDD ] 之八 ║剪不断理还乱的 值对象和Dto
- gym 102059A 树链剖分后odt维护区间
- hbase的api操作之scan
- linux下umask的使用讲解
- asp.net core认证和授权的初始认识--claim、claimsidentity、claimsprincipal
- python requests 上传文件
- Angular 个人深究(二)【发布与订阅】
- BTM学习小记
- redis 过期时间与缓存
- TOJ3955: NKU ACM足球赛(并查集+map+细节题)
- SqlServer添加触发器死锁的原因
- PAT甲题题解-1102. Invert a Binary Tree (25)-(建树,水题)
热门文章
- 每日三道面试题,通往自由的道路10——JMM篇
- Qt5实现文本编辑器(附图片转PDF与详细代码)
- 20、nginx之ngx_http_upstream_module模块
- 【译】Go:程序如何恢复?
- MinIO关闭公开桶的列表展示(S3 browser)
- Blazor 组件入门指南
- 连接mysql数据库实现增删改查(一)
- CentOS6.5 mini安装到VirtualBox虚拟机中
- asp.net 读取 connectionStrings
- Qt Model/view 小实例 文件目录浏览器