Unity2D拖动物体笔记

Unity2D拖动物体笔记

unity拖动物体的方式有很多。
最简单就是检测鼠标的经过,按下和抬起。当鼠标按下时,使得物体跟随着鼠标,也就是两者的位置信息保持一致。

需要注意的是,物体的坐标属于世界坐标,鼠标的坐标属于屏幕坐标,所以需要吧鼠标的坐标信息转换成世界坐标。

private bool isOver = false;
    private void Update()
    {
        if (isOver)
        {
            Vector2 Pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);//转换成世界坐标
            transform.position = new Vector2(Pos.x, Pos.y);
        }
    }
    private void OnMouseOver()
    {
        if (Input.GetMouseButtonDown(0))
        {
            isOver = true;
        }
        if (Input.GetMouseButtonUp(0))
        {
            isOver = false;
        }

不过unity更方便的方法

OnMouseDrag()

它相当于将上面的三个事件结合在一起。
同时设置一个鼠标处于物体上方时,放大物体的方法。做出在这里插入图片描述选择的特效。

使用接口实现UI物体的拖动到格子里。

public class DraagByInterface : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
    [SerializeField] private Canvas canvas;
    private RectTransform rectTrans;
    private CanvasGroup canvasGroup;
    private void Start()
    {
        rectTrans = GetComponent<RectTransform>();
        canvasGroup = GetComponent<CanvasGroup>();
    }
    public void OnBeginDrag(PointerEventData eventData)
    {

        canvasGroup.blocksRaycasts = false;//使得物体处于格子的上方时,格子能检测到鼠标。
        canvasGroup.alpha = 0.35f;
    }

    public void OnDrag(PointerEventData eventData)
    {
        rectTrans.anchoredPosition += eventData.delta/canvas.scaleFactor;//利用ui的锚点跟随鼠标移动
    }

    public void OnEndDrag(PointerEventData eventData)
    {
        canvasGroup.blocksRaycasts = true;
        canvasGroup.alpha = 1f;
    } 
}

在这里插入图片描述
当场景中有多个选框时,通过改变选框的层级,做到当该选框被点击时,显示在最上层。

public void OnPointerDown(PointerEventData eventData)//需要IPointerDownHandler接口
{
    panelRectTrans.SetAsLastSibling();
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43821918/article/details/106334309