欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-27 17:51:27
拖动是非常常用的功能,也非常容易实现,比如直接让物体坐标等于鼠标坐标等。本篇博客主要讲解下如何给拖拽加上区域限制。注意对象要加上collider2D。public float limit = 5f; public float speed = 2.5f; Vector3 oriMousePos; private void OnMouseDown() { oriMousePos = Input.mousePosition; //记录按下位置 }...

拖动是非常常用的功能,也非常容易实现,比如直接让物体坐标等于鼠标坐标等。本篇博客主要讲解如何实现拖拽并限制拖拽区域。
注意对象要加上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轴加限制稍微修改下代码即可。

本文地址:https://blog.csdn.net/qq_39162826/article/details/107619401