Unity2D实现Sprite拖动并且添加拖动限制范围

拖动是非常常用的功能,也非常容易实现,比如直接让物体坐标等于鼠标坐标等。本篇博客主要讲解如何实现拖拽并限制拖拽区域。
注意对象要加上collider2D。

	public float limit = 5f;
    public float speed = 2.5f;
    Vector3 oriMousePos;

    private void OnMouseDown()
    {
        oriMousePos = Input.mousePosition; //记录按下位置
    }

    private void OnMouseDrag()
    {
        //当前鼠标位置与初始鼠标点下位置的偏移量
        var offset = (Camera.main.ScreenToWorldPoint(Input.mousePosition).x - Camera.main.ScreenToWorldPoint(oriMousePos).x) * speed;

        //到达边界后执行,offset > 0是为了可以反向滑动
        if (transform.position.x >= limit && offset > 0)
        {
            transform.position = new Vector3(limit, transform.position.y, transform.position.z); //锁定位置不可越过界限
            oriMousePos = Input.mousePosition; //重置偏移,反向滑动可以立即生效
            return; //停止移动
        }

        //同上
        if (transform.position.x <= -limit && offset < 0)
        {
            transform.position = new Vector3(-limit, transform.position.y, transform.position.z);
            oriMousePos = Input.mousePosition;
            return;
        }

        //移动
        transform.Translate(new Vector3(offset, 0, 0) * Time.deltaTime, Space.Self);
    }

原理很简单,记录下方便下次使用,如果要对Y轴加限制稍微修改下代码即可。

你可能感兴趣的:(Unity学习)