| | |
| | | /// </summary> |
| | | public class DragItem:MonoBehaviour,ICanvasRaycastFilter,IBeginDragHandler,IDragHandler,IEndDragHandler |
| | | { |
| | | [SerializeField] public Canvas parentCanvas; |
| | | [SerializeField] public Canvas canvas; |
| | | // 拖拽区域限制 |
| | | [SerializeField] |
| | | RectTransform m_Area; |
| | |
| | | private set { m_RaycastTarget = value; } |
| | | } |
| | | |
| | | [SerializeField] public int pos; |
| | | [NonSerialized] public int pos; |
| | | |
| | | private Vector3 orgScale; |
| | | private DragContainer lastTransform; |
| | | |
| | | // 当前对象的RectTransform组件 |
| | | public RectTransform rectTransform { get { return this.transform as RectTransform; } } |
| | | RectTransform rectTransform { get { return this.transform as RectTransform; } } |
| | | |
| | | |
| | | /// <summary> |
| | | /// 开始拖拽时调用 |
| | |
| | | { |
| | | raycastTarget = false; |
| | | this.transform.position = UIUtility.ClampWorldPosition(area, eventData); |
| | | orgScale = rectTransform.localScale; |
| | | rectTransform.localScale = orgScale * 1.2f; |
| | | rectTransform.localScale = Vector3.one * 1.2f; |
| | | |
| | | canvas.sortingLayerID = parentCanvas.sortingLayerID; |
| | | canvas.sortingOrder = parentCanvas.sortingOrder + pos + 10; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | this.transform.position = UIUtility.ClampWorldPosition(area,eventData); |
| | | |
| | | // 检测是否进入目标区域 |
| | | if (eventData.pointerEnter != null) { |
| | | var target = eventData.pointerEnter.transform; |
| | | if (target != null) { |
| | | // 进入目标区域,放大 1.2 倍 |
| | | target.localScale = Vector3.one * 1.2f; |
| | | if (eventData.pointerEnter != null) |
| | | { |
| | | if (lastTransform != null && lastTransform != eventData.pointerEnter.GetComponent<DragContainer>()) |
| | | { |
| | | lastTransform.mainTransform.localScale = Vector3.one; |
| | | lastTransform = null; |
| | | } |
| | | } else { |
| | | // 离开目标区域,恢复大小 |
| | | if (eventData.pointerPress != null) { |
| | | var target = eventData.pointerPress.transform; |
| | | if (target != null) { |
| | | target.localScale = Vector3.one; |
| | | } |
| | | var target = eventData.pointerEnter.GetComponent<DragContainer>(); |
| | | // 输出组件路径 |
| | | if (target != null) |
| | | { |
| | | lastTransform = target; |
| | | // 进入目标区域,放大 1.2 倍 |
| | | lastTransform.mainTransform.localScale = Vector3.one * 1.2f; |
| | | } |
| | | } |
| | | rectTransform.localScale = Vector3.one * 1.2f; |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// </summary> |
| | | public Action<int, int> onEndDragEvent; |
| | | |
| | | public void OnEndDrag(PointerEventData eventData) { |
| | | public void OnEndDrag(PointerEventData eventData) |
| | | { |
| | | raycastTarget = true; |
| | | rectTransform.localScale = orgScale; |
| | | rectTransform.localScale = Vector3.one; |
| | | |
| | | if (lastTransform != null) |
| | | { |
| | | lastTransform.mainTransform.localScale = Vector3.one; |
| | | lastTransform = null; |
| | | } |
| | | |
| | | if (eventData.pointerEnter == null) |
| | | { |
| | | onEndDragEvent?.Invoke(pos, -1); |
| | |
| | | } |
| | | |
| | | var container = eventData.pointerEnter.GetComponent<DragContainer>(); |
| | | if(container == null) { |
| | | if (container == null) |
| | | { |
| | | onEndDragEvent?.Invoke(pos, -1); |
| | | return; |
| | | } |
| | | |
| | | // var contain = UIUtility.RectTransformContain(eventData.pointerEnter.transform as RectTransform,rectTransform); |
| | | // if(contain) { |
| | | // rectTransform.position = eventData.pointerEnter.transform.position; |
| | | // } |
| | | onEndDragEvent?.Invoke(pos, container.pos); |
| | | canvas.sortingLayerID = parentCanvas.sortingLayerID; |
| | | canvas.sortingOrder = parentCanvas.sortingOrder + pos + 1; |
| | | } |
| | | |
| | | /// <summary> |