UGUI控件可拖拽移动类组件
来源:互联网 发布:软件定制论坛 编辑:程序博客网 时间:2024/06/17 13:35
由于Unity3d自带的UGUI不带拖拽功能,想要实现拖拽功能,必须自己实现拖拽类.所以我写了一个通用的UGUI拖拽组件,使用方便.
使用方法:
直接放到要拖拽的UI组件上,设置目标移动的对象即可,也可以不设置目标对象,默认是拖动对象自己.
using UnityEngine;using System.Collections;using UnityEngine.EventSystems;using UnityEngine.UI;public class DragBase : MonoBehaviour,IPointerDownHandler,IDragHandler{private Vector2 Local_Pointer_Position;private Vector3 Panel_Local_Position;public RectTransform targetObject; private RectTransform parentRectTransform; //父窗口矩阵private RectTransform targetRectTransform; //移动目标矩阵void Awake(){if (targetObject == null) {targetObject=transform as RectTransform;}parentRectTransform = targetObject.parent as RectTransform;targetRectTransform=targetObject as RectTransform;}public void OnPointerDown(PointerEventData data){Panel_Local_Position = targetRectTransform.localPosition;RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTransform, data.position, data.pressEventCamera, out Local_Pointer_Position);targetObject.gameObject.transform.SetAsLastSibling();//保证当前操作的对象能够优先渲染,即不会被其它对象遮挡住}public void OnDrag(PointerEventData data){Vector2 localPointerPosition;if (RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTransform, data.position, data.pressEventCamera, out localPointerPosition)){Vector3 offsetToOriginal = localPointerPosition - Local_Pointer_Position;targetObject.localPosition = Panel_Local_Position + offsetToOriginal;}}}
以下是一个背包拖拽物品基础类,可以修改了变成可拖拽背包.
using UnityEngine;using System.Collections;using UnityEngine.EventSystems;using UnityEngine.UI;public class DragItem : MonoBehaviour,IPointerDownHandler,IDragHandler,IBeginDragHandler,IEndDragHandler {private Vector2 Local_Pointer_Position;private Vector3 Panel_Local_Position;public RectTransform targetObject; private RectTransform parentRectTransform; //父窗口矩阵private RectTransform targetRectTransform; //移动目标矩阵private CanvasGroup canvasgroup;void Awake(){if (targetObject == null) {targetObject=transform as RectTransform;}//CanvasGroupcanvasgroup=GetComponent<CanvasGroup>();if(!canvasgroup)canvasgroup=gameObject.AddComponent("CanvasGroup")as CanvasGroup;//panelRectTransform = transform.parent as RectTransform;parentRectTransform = targetObject.parent as RectTransform;targetRectTransform=targetObject as RectTransform;}public void OnPointerDown(PointerEventData data){Panel_Local_Position = targetRectTransform.localPosition;RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTransform, data.position, data.pressEventCamera, out Local_Pointer_Position);targetObject.gameObject.transform.SetAsLastSibling();//保证当前操作的对象能够优先渲染,即不会被其它对象遮挡住}public void OnBeginDrag (PointerEventData eventData){canvasgroup.blocksRaycasts = false;}public void OnDrag(PointerEventData data){//if (panelRectTransform == null || parentRectTransform == null)//return;//print (data.position);//检测到拖拽物品的下放物品.if (data.pointerEnter != null) {if(data.pointerEnter.name!="test")print (data.pointerEnter.name);}Vector2 localPointerPosition;if (RectTransformUtility.ScreenPointToLocalPointInRectangle(parentRectTransform, data.position, data.pressEventCamera, out localPointerPosition)){Vector3 offsetToOriginal = localPointerPosition - Local_Pointer_Position;targetObject.localPosition = Panel_Local_Position + offsetToOriginal;}}public void OnEndDrag (PointerEventData eventData){canvasgroup.blocksRaycasts = true;}}
0 0
- UGUI控件可拖拽移动类组件
- 【UGUI】UGUI 常用布局组件
- Label控件利用Timer组件进行移动
- UGUI鼠标点击移动
- [UGUI] Canvas组件
- uGUI 基本组件
- Unity UGUI--Text组件
- UGUI 轮播图组件实现
- UGUI的Dropdown组件
- UGui 之 Canvas 组件
- UGUI基础组件Text
- UGUI滑页组件
- UGUI下拉列表控件
- UGUI基本控件
- UGUI Button控件
- ugui Image控件介绍
- UGUI - Text控件
- UGUI常用控件使用
- LeetCode24 Swap Nodes in Pairs 25. Reverse Nodes in k-Group详解
- ubuntu开启sshd服务(转载)
- pppcloud云主机下linux环境变量设置错误后,如何恢复解决方案
- javascript sort函数探究
- Key escrow (escrowed keys)
- UGUI控件可拖拽移动类组件
- php+jQuery全选 反选
- ssh: connect to host localhost port 22: Connection refused
- java -- 将int 转为二进制,再提取二进制中每一位信息
- JAVA 仿XP画图板的总结
- hbase的写和读,大合并和小合并
- PHP 更新式缓存
- QOS-1 ClassAndMarking标记和分类
- 数组的声明与使用