UGUI之实现拖拽功能
来源:互联网 发布:直肠指诊怎么做 知乎 编辑:程序博客网 时间:2024/05/18 05:01
最近几天在跟着一个视频教程学习,其中用到了拖拽功能,我想到了官方的DEMO中有相应的例子,就去看了一下,很简单,把官方的代码拿过来,稍微做些修改就实现了拖动功能。
一、实现拖拽功能
先上代码:
using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;using System.Collections;public class DragableCard : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler{ // begin dragging public void OnBeginDrag(PointerEventData eventData) { SetDraggedPosition(eventData); } // during dragging public void OnDrag(PointerEventData eventData) { SetDraggedPosition(eventData); } // end dragging public void OnEndDrag(PointerEventData eventData) { SetDraggedPosition(eventData); } /// <summary> /// set position of the dragged game object /// </summary> /// <param name="eventData"></param> private void SetDraggedPosition(PointerEventData eventData) { var rt = gameObject.GetComponent<RectTransform>(); // transform the screen point to world point int rectangle Vector3 globalMousePos; if (RectTransformUtility.ScreenPointToWorldPointInRectangle(rt, eventData.position, eventData.pressEventCamera, out globalMousePos)) { rt.position = globalMousePos; } }}
只要继承了IBeginDragHandler、IDragHandler、和IEndDragHandler这三个接口,并实现了OnBeginDrag、OnDrag和OnEndDrag这三个方法,我们就可以实现拖拽功能。其中,OnBeginDrag处理开始拖动时要做什么事,OnDrag处理拖动过程中要做什么事,OnEndDrag处理拖动结束时要做什么事,是不是很easy啊!
二、实现跟背包类似的功能
UGUI官方的例子实际是背包界面的雏形,刚好我要实现一个类似的功能,就是拖动卡片到指定区域。我同样把官方的代码稍做修改,运行,可是没有起作用,经过研究和实践,我发现必须保证指定区域对应的物体的渲染优先级比被拖动物体的高,即在Hierachy视图中,指定区域对应的物体一定要在被拖动物体的下面,如图
这样才能保证脚本中的OnDrop方法才会被调用。接下来上代码:
using UnityEngine;using UnityEngine.UI;using UnityEngine.EventSystems;using System.Collections;public class DropMe : MonoBehaviour, IDropHandler, IPointerEnterHandler, IPointerExitHandler{ public GameObject m_myCardsObj; private bool m_isIn = false; public void OnEnable() { Debug.Log("............"); } // when you release the left button of mouse public void OnDrop(PointerEventData data) { Debug.Log(string.Format(">>>>> {0}", m_isIn)); if (!m_isIn) { m_myCardsObj.GetComponent<MyCards>().UpdateShow(); } } // when the mouse moving in the game object public void OnPointerEnter(PointerEventData data) { m_isIn = true; Debug.Log(m_isIn); } // when the mouse moving out the game object public void OnPointerExit(PointerEventData data) { m_isIn = false; Debug.Log(m_isIn); } private Sprite GetDropSprite(PointerEventData data) { var originalObj = data.pointerDrag; if (originalObj == null) return null; var srcImage = originalObj.GetComponent<Image>(); if (srcImage == null) return null; return srcImage.sprite; }}
继承了IDropHandler, IPointerEnterHandler, IPointerExitHandler这三个接口,同样也实现对应的三个方法OnDrop、OnPointerEnter和OnPointerExit。其中,OnDrop处理松开鼠标左键时要做什么事,OnPointerEnter处理鼠标指针进入挂载该脚本的物体区域时要做什么事,OnPointerExit处理处理鼠标指针移出挂载该脚本的物体区域时要做什么事,也很easy!
在这里,我的描述太简单了,要结合实际的例子,亲自体会一下才会明白!官方的例子可以在Assets Stroe中找到,是免费的。
0 0
- UGUI之实现拖拽功能
- [UGUI功能]UGUI实现按住拖拽UI功能
- Unity UGUI 实现简单拖拽功能
- UGUI 拖拽功能的实现
- 简单实现UGUI拖拽功能
- Unity3D-UGUI-drag and drop实现拖拽放下功能
- ugui和ngui如何实现拖拽背包功能
- 基于Ugui的窗口拖拽功能
- UGUI实现虚拟手柄功能
- UGUI背包实现详解之三——UGUI中如何代码实现背包精灵物品互换拖拽效果
- UGUI背包实现详解之一UGUI精准拖拽
- 关于UGUI实现拖拽功能的接口(IBeginDragHandler、IEndDragHandler、IDragHandler )需注意的问题
- [Unity]关于UGUI拖拽备份克隆功能的简单实现
- 【UGUI】UGUI 拖拽图片
- UGUI拖拽事件的实现
- Unity UGUI 拖拽跟随实现
- Unity3d使用UGUI实现长按功能
- 利用UGUI实现 显示/隐藏密码 功能
- 程序实现给定文法的LL(1)分析
- 算法升级线路
- mx4 无法发送短信
- JSP:使用useBean标准动作
- zoj 3878 Convert QWERTY to Dvorak
- UGUI之实现拖拽功能
- linux下查找配置文件
- 小马哥----高仿小米note刷机 机型主板型号Q8 拆机主板详图与开机界面图 新版小米note机型
- 第八周上机实践项目1——实现复数类中的运算符重载(1)
- 第七周上机实践项目 用户图形界面
- PythonChallenge0-3题详解Python版本
- 最无能为力的时候我想在什么东西上花钱
- 浅谈linux进程调度
- 4.1