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

  

最新文章

  1. 使用WCF对外提供接口
  2. Indigo Studio
  3. 让 BAT 的 Offer 不再难拿
  4. 简单风格 在线音乐播放器(支持wav,MP3等)
  5. aspx页面状态管理(查询字符串Request与Application)
  6. Linux系统swap已分区但无法挂载与cryptswap1问题
  7. Android 每隔3s更新一次title
  8. 【2017-06-05】Jquery.ajax
  9. 从壹开始微服务 [ DDD ] 之八 ║剪不断理还乱的 值对象和Dto
  10. gym 102059A 树链剖分后odt维护区间
  11. hbase的api操作之scan
  12. linux下umask的使用讲解
  13. asp.net core认证和授权的初始认识--claim、claimsidentity、claimsprincipal
  14. python requests 上传文件
  15. Angular 个人深究(二)【发布与订阅】
  16. BTM学习小记
  17. redis 过期时间与缓存
  18. TOJ3955: NKU ACM足球赛(并查集+map+细节题)
  19. SqlServer添加触发器死锁的原因
  20. PAT甲题题解-1102. Invert a Binary Tree (25)-(建树,水题)

热门文章

  1. 每日三道面试题,通往自由的道路10——JMM篇
  2. Qt5实现文本编辑器(附图片转PDF与详细代码)
  3. 20、nginx之ngx_http_upstream_module模块
  4. 【译】Go:程序如何恢复?
  5. MinIO关闭公开桶的列表展示(S3 browser)
  6. Blazor 组件入门指南
  7. 连接mysql数据库实现增删改查(一)
  8. CentOS6.5 mini安装到VirtualBox虚拟机中
  9. asp.net 读取 connectionStrings
  10. Qt Model/view 小实例 文件目录浏览器