Как сделать Drag and Drop по направлению вектора Unity
Нужно сделать 2D задвижки, которые можно будет двигать мышью. текущий вариант:
public float maxDistance;
private Vector3 startPos;
private Vector3 endPos;
private Camera mainCamera;
private Plane dragPlane;
private Vector3 offset;
private void Start()
{
mainCamera = Camera.main;
startPos = transform.position;
endPos = transform.right * maxDistance + transform.position;
}
private void OnMouseDown()
{
dragPlane = new(mainCamera.transform.forward, transform.position);
Ray camRay = mainCamera.ScreenPointToRay(Input.mousePosition);
dragPlane.Raycast(camRay, out float planeDist);
offset = transform.position - camRay.GetPoint(planeDist);
}
private void OnMouseDrag()
{
Ray camRay = mainCamera.ScreenPointToRay(Input.mousePosition);
dragPlane.Raycast(camRay, out float planeDist);
Vector2 r = camRay.GetPoint(planeDist) + offset;
float x = Mathf.Clamp(r.x, startPos.x, endPos.x);
float y = Mathf.Clamp(r.y, startPos.y, endPos.y);
transform.position = new Vector2(x, y);
}
Это работает, но только в горизонтали и вертикали. Нужно чтобы при любом наклоне задвижка двигалась по чёткой линии. Как это реализовать?