using UnityEngine;
using UnityEngine.EventSystems;
using System.Collections;
using System;
//ç»ç©ºé´æ·»å çå¬äºä»¶è¦å®ç°çä¸äºæ¥å£
public class DragUI : MonoBehaviour, IPointerDownHandler, IDragHandler, IPointerUpHandler,
IEndDragHandler, IPointerEnterHandler, IPointerExitHandler
{
public RectTransform canvas; //å¾å°canvasçuguiåæ
private RectTransform imgRect; //å¾å°å¾ççuguiåæ
Vector2 offset = new Vector3(); //ç¨æ¥å¾å°é¼ æ åå¾ççå·®å¼
Vector3 imgReduceScale = new Vector3(1, 1, 1); //设置å¾ç缩æ¾
Vector3 imgNormalScale = new Vector3(1, 1, 1); //æ£å¸¸å¤§å°
// Use this for initialization
void Start()
{
imgRect = GetComponent();
}
//å½é¼ æ æä¸æ¶è°ç¨ æ¥å£å¯¹åº IPointerDownHandler
public void OnPointerDown(PointerEventData eventData)
{
Vector2 mouseDown = eventData.position; //è®°å½é¼ æ æä¸æ¶çå±å¹åæ
Vector2 mouseUguiPos = new Vector2(); //å®ä¹ä¸ä¸ªæ¥æ¶è¿åçuguiåæ
//RectTransformUtility.ScreenPointToLocalPointInRectangle()ï¼æå±å¹åæ 转åæuguiåæ
//canvasï¼åæ è¦è½¬æ¢å°åªä¸ä¸ªç©ä½ä¸ï¼è¿éimgç¶ç±»æ¯Canvasï¼æä»¬å°±ç¨Canvas
//eventData.enterEventCameraï¼è¿ä¸ªäºä»¶æ¯ç±åªä¸ªæåæºæ§è¡ç
//out mouseUguiPosï¼è¿å转æ¢åçuguiåæ
//isRectï¼æ¹æ³è¿åä¸ä¸ªboolå¼ï¼å¤æé¼ æ æä¸çç¹æ¯å¦å¨è¦è½¬æ¢çç©ä½ä¸
bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, mouseDown, eventData.enterEventCamera, out mouseUguiPos);
if (isRect) //妿å¨
{
//计ç®å¾çä¸å¿åé¼ æ ç¹çå·®å¼
offset = imgRect.anchoredPosition - mouseUguiPos;
}
}
//å½é¼ æ æå¨æ¶è°ç¨ å¯¹åºæ¥å£ IDragHandler
public void OnDrag(PointerEventData eventData)
{
Vector2 mouseDrag = eventData.position; //å½é¼ æ æå¨æ¶çå±å¹åæ
Vector2 uguiPos = new Vector2(); //ç¨æ¥æ¥æ¶è½¬æ¢åçæå¨åæ
//åä¸é¢ç±»ä¼¼
bool isRect = RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, mouseDrag, eventData.enterEventCamera, out uguiPos);
if (isRect)
{
//设置å¾ççuguiåæ ä¸é¼ æ çuguiåæ ä¿æä¸å
imgRect.anchoredPosition = offset + uguiPos;
}
}
//å½é¼ æ æ¬èµ·æ¶è°ç¨ å¯¹åºæ¥å£ IPointerUpHandler
public void OnPointerUp(PointerEventData eventData)
{
offset = Vector2.zero;
}
//å½é¼ æ ç»ææå¨æ¶è°ç¨ å¯¹åºæ¥å£ IEndDragHandler
public void OnEndDrag(PointerEventData eventData)
{
offset = Vector2.zero;
}
//å½é¼ æ è¿å
¥å¾çæ¶è°ç¨ å¯¹åºæ¥å£ IPointerEnterHandler
public void OnPointerEnter(PointerEventData eventData)
{
imgRect.localScale = imgReduceScale; //缩å°å¾ç
}
//å½é¼ æ éåºå¾çæ¶è°ç¨ å¯¹åºæ¥å£ IPointerExitHandler
public void OnPointerExit(PointerEventData eventData)
{
imgRect.localScale = imgNormalScale; //åå¤å¾ç
}
}