UGUI脚本记录
2016-01-04 09:34
477 查看
/******************************************************************* * Summary: UGUI拖拽脚本 * Author : * Date : *******************************************************************/ using UnityEngine; using System.Collections; using UnityEngine.EventSystems; using System; public delegate void GameEvent(object para); public class DragDropItem : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler,IPointerClickHandler { public bool canDrag = true; public bool dragClone = true; public GameObject originObj = null; public GameObject parentObj = null; private GameObject m_DragObj; private RectTransform m_DragPlane; public Action<object> onDragStart; public Action<object> onDragEnd; public Action<object> onClick; public void OnBeginDrag(PointerEventData eventData) { if (!canDrag) return; var canvas = Util.FindInParents<Canvas>(gameObject); if (canvas == null) return; if (dragClone) { m_DragObj = Instantiate(gameObject) as GameObject; m_DragObj.GetComponent<DragDropItem>().originObj = gameObject; m_DragObj.GetComponent<DragDropItem>().dragClone = false; } else { m_DragObj = gameObject; } m_DragObj.GetComponent<DragDropItem>().parentObj = transform.parent.gameObject; m_DragObj.transform.SetParent(canvas.transform, false); m_DragObj.transform.SetAsLastSibling(); CanvasGroup group = m_DragObj.GetComponent<CanvasGroup>(); if (group == null) group = m_DragObj.AddComponent<CanvasGroup>(); group.blocksRaycasts = false; m_DragPlane = canvas.transform as RectTransform; SetDraggedPosition(eventData); if(onDragStart!=null) { onDragStart(new object[] { m_DragObj, transform.parent.gameObject }); } } public void OnDrag(PointerEventData data) { if (!canDrag) return; if (m_DragObj != null) { SetDraggedPosition(data); } } public void OnEndDrag(PointerEventData eventData) { if (!canDrag) return; if (m_DragObj != null) { GameObject target=null; RaycastResult rr = eventData.pointerCurrentRaycast; if (rr.gameObject != null) { if (rr.gameObject.GetComponent<DropContainer>() != null)//直接放上去 { target = rr.gameObject; } // else if (rr.gameObject.GetComponent<BaseItem>() != null)//替换 // { // target = rr.gameObject; // } } if (onDragEnd != null) { onDragEnd(new object[] { m_DragObj, target }); m_DragObj = null; } else { Destroy(m_DragObj); } } } public void OnPointerClick(PointerEventData eventData) { if (!canDrag) return; if (m_DragObj != null) return; GameObject target = eventData.pointerPress; if (onClick != null) { onClick(new object[] { target }); } } private void SetDraggedPosition(PointerEventData data) { var rt = m_DragObj.GetComponent<RectTransform>(); Vector3 globalMousePos; if (RectTransformUtility.ScreenPointToWorldPointInRectangle(m_DragPlane, data.position, data.pressEventCamera, out globalMousePos)) { rt.position = globalMousePos; rt.rotation = m_DragPlane.rotation; rt.localScale = Vector3.one * 0.9f; } } }
相关文章推荐
- 轻量级ORM-Fluentdata入门
- UESTC 92 Journey(LCA)
- UIImageView裁剪成圆形的方法
- 关于VS2010 rcxdti.dll is unable to load rcxdtiui.dll加载失败问题的解决方案
- UITextField
- require.js的用法-阮一峰
- luerl 测试用例
- iOS_UITableView_不显示无内容部分的分割线
- 新手常忽视的问题,交互设计中的默认值!
- build up
- UITextView字数限制自适应高度限制输入
- UITextView自适应高度动态计算高度
- iOS中storyboard故事板使用Segue跳转界面、传值
- UISlider用法的简单整理
- 圆圈进度条 MyUICircleView
- iosiOS - 步进控件UIStepper
- iOS开发UI篇—核心动画(UIView封装动画)
- request.getHeader("referer");的用途
- 简单的java UI例子(JFrame,JButton,ActionListener等)
- UISrcoll控件简单介绍