Как сделать 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);
}

Это работает, но только в горизонтали и вертикали. Нужно чтобы при любом наклоне задвижка двигалась по чёткой линии. Как это реализовать?


Ответы (0 шт):