原因:判断是否将一个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属性打开试试。

  

UI:PointerEventData的更多相关文章

  1. UI:UITableView 编辑、cell重用机制

    tableView编辑.tableView移动.UITableViewController tableView的编辑:cell的添加.删除. 使⽤场景: 删除⼀个下载好的视频,删除联系⼈: 插⼊⼀条新 ...

  2. UI:基础

    App的生命周期 参考 多态的使用 // // main.m #import <Foundation/Foundation.h> #import "SingleDog.h&quo ...

  3. Android UI:机智的远程动态更新策略

    问题描述 做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面通常会出现 UI的增加.减少.内容变化.以及跳转界面发生变化等问题.每次发生变化都要手动修改代码,而入口界面通常具有 ...

  4. Vue UI:Vue开发者必不可少的工具

    译者按: Vue开发工具越来越好用了! 原文: Vue UI: A First Look 译者: Fundebug 本文采用意译,版权归原作者所有 随着最新的稳定版本Vue CLI 3即将发布,是时候 ...

  5. android UI:Fragment碎片

    碎片(Fragment) 嵌入与活动中的UI片段,为了合理的分配布局而存在,这是我的简单理解.多用于兼顾手机与平板的UI,也适用于灵活高级的UI制作. Demo 简单的按键切换两片不同的Demo 新建 ...

  6. WPF 多线程 UI:设计一个异步加载 UI 的容器

    对于 WPF 程序,如果你有某一个 UI 控件非常复杂,很有可能会卡住主 UI,给用户软件很卡的感受.但如果此时能有一个加载动画,那么就不会感受到那么卡顿了.UI 的卡住不同于 IO 操作或者密集的 ...

  7. UI:多线程 、用GCD创建线程

    什么是应用(程序):就是我们编写的代码编译后生成的app文件 进程:凡是一个运行的程序都可以看作为一个进程,如打开的多个 word,就可以认为是一个进程的多个线程. 线程:至少有一个线程就是主线程,网 ...

  8. Material UI:很强大的CSS框架

    Material UI 是一款功能很强大,界面却十分清新简洁的CSS框架.Material UI利用了Google的Material Design 全新设计语言.而且让每个UI组件都变得很独立.因此开 ...

  9. UI:文件操作、通知中心

    对文件的操作: #define PATH @"/Users/mac/Desktop/未命名文件夹" #define ERROR(a) if(a){NSLog(@"%@&q ...

随机推荐

  1. DDoS防护方式以及产品

    导航: 这里将一个案例事项按照流程进行了整合,这样查看起来比较清晰.部分资料来自于Cloudflare 1.DDoS介绍 2.常用DDoS攻击 3.DDoS防护方式以及产品 4.Cloudflare ...

  2. Redis之缓存设计

    缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常应用的开发至关重要.但是将缓存加入应用架构后也会带来一些问题,本章将针对这些问题介绍缓存使用技巧和设计方案,包含如下内容: □ 缓存的收 ...

  3. Redis 实战篇:GEO助我邂逅附近女神

    码老湿,阅读了你的巧用数据类型实现亿级数据统计之后,我学会了如何游刃有余的使用不同的数据类型(String.Hash.List.Set.Sorted Set.HyperLogLog.Bitmap)去解 ...

  4. hdu 3397 Sequence operation 线段树 区间更新 区间合并

    题意: 5种操作,所有数字都为0或1 0 a b:将[a,b]置0 1 a b:将[a,b]置1 2 a b:[a,b]中的0和1互换 3 a b:查询[a,b]中的1的数量 4 a b:查询[a,b ...

  5. POJ 3449 Geometric Shapes 判断多边形相交

    题意不难理解,给出多个多边形,输出多边形间的相交情况(嵌套不算相交),思路也很容易想到.枚举每一个图形再枚举每一条边 恶心在输入输出,不过还好有sscanf(),不懂可以查看cplusplus网站 根 ...

  6. ACM金牌选手整理的【LeetCode刷题顺序】

    算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...

  7. MYSQL 连接举例

    内连接:连接的多个数据必须存在才能连接select * from sjh14482条记录 create table sjha as ( select * from sjh1 limit 20 )sel ...

  8. MVC框架介绍分析

    相信绝大多数学习过Javaweb的人都知道一个系统的模式--Spring模式,以这么模式中为基础,衍生出各种各样的新的模式,其中最重要的就是Spring下的Spring MVC MVC是Xerox P ...

  9. final修饰符(2)

    final局部变量 系统不会对局部变量进行初始化,局部变量必须又程序员显示初始化,因此使用final修饰局部变量,可以在声明时指定默认值,也可以在后面的代码中对该final变量赋初始值,但只能赋值一次 ...

  10. nacos配置本地多个实例(伪集群)

    在本地配置多个nacos实例(伪集群),一般就是配置多个nacos端口,并启动多个startup.sh脚本.网上一些博客通过修改startup.sh脚本来指定不同nacos端口,比如:./startu ...