继承3个处理拖拽方法的接口IBeginDragHandler, IDragHandler, IEndDragHandler

 /// <summary>/// 实现接口的OnBeginDrag方法,处理开始拖拽时要做的事情/// </summary>/// <param name="eventData"></param>public void OnBeginDrag(PointerEventData eventData){startPosition = transform.position;//获取初始位置imageFather = transform.parent;//获取父物体的transformtransform.SetParent(canvas.transform);//将物品放在canvas最下方,确保不会被遮挡canvasGroup.blocksRaycasts = false;//射线可以穿透物体}
/// <summary>/// 实现接口的OnDrag方法,处理拖动中要做的事情/// </summary>/// <param name="eventData"></param>public void OnDrag(PointerEventData eventData){transform.position = screenPositionToWorldPositionBy_Z(Input.mousePosition, transform.position);}
/// <summary>/// 通过基准点的Z点坐标,转化屏幕坐标为世界坐标/// </summary>/// <param name="needToFixedScreenPosition">需要转化的屏幕坐标</param>/// <param name="baseWorldPosition">基准点(需要它的z点坐标做转换)</param>Vector3 screenPositionToWorldPositionBy_Z(Vector3 needToFixedScreenPosition, Vector3 baseWorldPosition){Vector3 baseScreenPosition = Camera.main.WorldToScreenPoint(baseWorldPosition);needToFixedScreenPosition.z = baseScreenPosition.z;return Camera.main.ScreenToWorldPoint(needToFixedScreenPosition);} 
/// <summary>/// 实现接口的OnEndDrag方法,处理结束时的方法/// </summary>/// <param name="eventData"></param>public void OnEndDrag(PointerEventData eventData ){//获取鼠标下的物体GameObject go = eventData.pointerCurrentRaycast.gameObject;//交换物品if (go.tag.Equals(Enum_Tags.InventoryItemGird)) ExchangeOfGoods(go);//复原else{transform.SetParent(imageFather);transform.position = startPosition;}canvasGroup.blocksRaycasts = true;//ui事件穿透:置为不能穿透}
/// <summary>/// 将一个物体放在另一个物体下/// </summary>/// <param name="child">作为子物体</param>/// <param name="parent">作为父物体</param>private void SetParentAndPosition(Transform child, Transform parent){child.SetParent(parent);child.position = parent.position;}
   /// <summary>/// 格子内的物品进行交换/// </summary>/// <param name="go">鼠标结束位置的格子</param>private void ExchangeOfGoods(GameObject go){Transform[] childrens = go.GetComponentsInChildren<Transform>();bool isHaveChildren= childrens.Length > 1;if (isHaveChildren){Transform child = go.transform.GetChild(0);SetParentAndPosition(child, imageFather);}SetParentAndPosition(gameObject.transform, go.transform);}
Vector3 screenPositionToWorldPositionBy_Z(Vector3 needToFixedScreenPosition, Vector3 baseWorldPosition){Vector3 baseScreenPosition = Camera.main.WorldToScreenPoint(baseWorldPosition);needToFixedScreenPosition.z = baseScreenPosition.z;return Camera.main.ScreenToWorldPoint(needToFixedScreenPosition);} 

Unity 鼠标拖拽功能相关推荐

  1. js实现鼠标拖拽功能基本思路

    如果要设置物体拖拽,那么必须使用三个事件,并且这三个事件的使用顺序不能颠倒. onmousedown:鼠标按下事件 onmousemove:鼠标移动事件 onmouseup:鼠标抬起事件 拖拽的基本原 ...

  2. vue项目实现鼠标拖拽功能

    <divid="back"@mousedown="draggableFun($event)"></div> //e.clientX和e. ...

  3. python鼠标拖拽功能_selenium鼠标移动、拖拽、双击、长按等操作

    selenium鼠标操作靠的是ActionChains(行为链)类,前面的文章我们已经介绍过,详情可以看ActionChains类,selenium的鼠标操作就不一一举例了,本节把鼠标移动.拖拽.双击 ...

  4. Unity鼠标拖拽旋转拉远拉近场景

    按下 左 "Alt" 键, 然后按下鼠标左键旋转场景,按下鼠标右键拖拽场景,滚动鼠标滚轮拉远拉近场景 (实际是摄像机的旋转移动和拉远拉近) 将下脚本直接拖拽到场景中的物体上,运行即 ...

  5. 【WPF】鼠标拖拽功能DragOver和Drop

    在Winform里面实现拖入功能只要设置控件AllowDrop=true; 然后实现方法 //拖入 private void txtInputPath_DragOver(object sender, ...

  6. js简单实现鼠标拖拽功能:盒子可以跟着鼠标移动位置

    实现的原理: 根据上面的图可以算出移动后的盒子的left和top: 鼠标距离边界的值: ev.pageY - box.top ev.pageX - box.left box2.top = ev2.pa ...

  7. python鼠标拖拽功能_Python wxpython模块响应鼠标拖动事件操作示例

    本文实例讲述了Python wxpython模块响应鼠标拖动事件操作.分享给大家供大家参考,具体如下: wxpython鼠标拖动事件小案例: #coding:UTF-8 import wx app = ...

  8. 用JavaScript原生手写div的鼠标拖拽功能

    一.三个事件onmousedown(鼠标按下),onmousemove(鼠标移动),onmouseup(鼠标松) 鼠标按下时 box.onmousedown = function(e) {consol ...

  9. python模拟拖拽文件_python 基于selenium实现鼠标拖拽功能

    1.准备html文件 首先我们需要准备一个鼠标滑动的html文件,用来演示鼠标滑动的效果,注意需要将我们的html文件放在自己的服务器上, 这样我们才能够通过selenium来进行验证.html文件如 ...

最新文章

  1. ElasticSearch的基本概念和集群分布式底层实现
  2. 报告老板,微服务高可用神器已祭出,您花巨资营销的高流量来了没?
  3. Hadoop RPC机制的使用
  4. 事务注解 @Transactional
  5. 10.2.0.5启动enterprise manager
  6. 域名解析服务之DNS查询类型
  7. 现代测试技术与软件关系大吗,现代测试技术及应用学习心得
  8. Q119:PBRT-V3,“复合重要性采样”(13.10章节)
  9. 【资源】图深度学习文献列表
  10. 新辰:传统行业进军互联网 怎样颠覆网络获得新生?
  11. 最小二乘法滤波 c语言,线性回归,最小二乘法 C语言实现
  12. linux内核编程4部曲之一:linux内核编译(2.6.12版本)图文解说
  13. react视频教程百度云资源链接
  14. linux intel显卡驱动下载,下载 英特尔®显卡 BETA WSL Windows® 10 DCH 驱动程序
  15. 世嘉MD游戏开发【十一】:背景卷轴滚动(视差滚动)Parallax Scroll和摄像机
  16. 多标签学习-多任务学习
  17. urllib库如何设置代理如何传递并保存cookie【python爬虫入门进阶】(02-3)
  18. 先进的半导体晶圆清洗技术
  19. Vue本地项目实现其他局域网电脑在线访问
  20. 个人计算机多核cpu好处,多核CPU的优缺点

热门文章

  1. 计算机病毒手动查杀,怎么手动查杀电脑病毒
  2. altera_reserved_tck的问题
  3. 2018计算机会考成绩查询网址,2019会考成绩查询网址 高中会考成绩怎么查
  4. 淘宝 OAuth2.0 的登录验证与授权
  5. php smarty语法,Smarty模板引擎视图输出基本语法解析
  6. Windows Android Studio安装教程
  7. cogs1000 伊吹萃香 二维最短路
  8. Java语言中J - R开头的英汉对照学习
  9. regionprops函数使用
  10. Timsort 介绍(listsort.txt 翻译)