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