原因:判断是否将一个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. 通过UnityWebRequest得到的纹理转精灵

    private IEnumerator GetImage(string url, Image fileImage) { UnityWebRequest WebRequest = new UnityWe ...

  2. 【IllegalArgumentException】: object is not an instance of declaring class

    java.lang.IllegalArgumentException: object is not an instance of declaring class 日前在调试动态代理的例子中,出现以上报 ...

  3. 大数据-Hadoop 伪分布模式

    1. 分析 (1)配置集群 (2)启动.测试集群增.删.查 (3)执行WordCount案例 2. 执行步骤 (1)配置集群 (a)配置:hadoop-env.sh Linux系统中获取JDK的安装路 ...

  4. 注解+AOP实现redis遍历缓存

    1.注解 package com.yun.smart.annotation; import java.lang.annotation.ElementType; import java.lang.ann ...

  5. HDU2050

    思路分析,被我写到分割问题里面.可以去看看. 贴下代码

  6. Linux 内核睡眠的几种方式

    译至:http://geeki.wordpress.com/2010/10/30/ways-of-sleeping-in-linux-kernel/ 在Linux中睡眠有2-3种不同的方法. 睡眠的第 ...

  7. nmon打开nmon文件出现 运行时错误13类型不匹配问题解决

    根据nmon工具安装及nmon analyser的使用 - 空谷幽兰LDD - 博客园 (cnblogs.com)文中,用nmon_analyse去打开监控到的nmon文件,出几个报错. 1 用WPS ...

  8. Pytest学习笔记12-配置文件pytest.ini

    前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. 常用的配置项 marks 作用:测试用例中添加了自定义标记( ...

  9. layim即时通讯实例各功能整合

    一.系统演示1.1 聊天窗体主界面演示 1.2 模拟两人在线聊天(点击图片查看演示视频) 1.3 在线演示> 在线演示,点击进入系统到这里,若是您想要的,接下来听我娓娓道来二.开发工具开发软件: ...

  10. 题解 guP4552 IncDec Sequence

    这道题是一道差分的题目 差分数组p即p[i]=a[i]-a[i-1] 如果我们把一个区间[l,r]里的数+1,那么我们不难发现p[l]'=a[l]+1-a[l-1]=p[l]+1,p[r+1]'=a[ ...