Есть такой код перемещения объектов, скрипт лежит на каждом объекте который можно передвигать курсором.
public void OnMouseDrag()
{
Vector2 newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
newPosition.x = Mathf.Clamp(newPosition.x, -2.73f, 2.84f);
newPosition.y = Mathf.Clamp(newPosition.y, -4.94f, 2.21f);
Collider2D hitCollider = Physics2D.OverlapPoint(newPosition);
if (hitCollider == null || hitCollider.gameObject == gameObject)
{
newPosition.x = Mathf.SmoothDamp(transform.position.x, newPosition.x, ref velocity.x, smoothTime, maxSpeed);
newPosition.y = Mathf.SmoothDamp(transform.position.y, newPosition.y, ref velocity.y, smoothTime, maxSpeed);
_rb.MovePosition(newPosition);
}
}
Если пробовать толкать одним объектом множество других, то они будут выталкиваться за Edge Collider2D.
Эти строчки отвечают за то, чтобы объекты не могли двигаться дальше игрового поля:
newPosition.x = Mathf.Clamp(newPosition.x, -2.73f, 2.84f);
newPosition.y = Mathf.Clamp(newPosition.y, -4.94f, 2.21f);
Это работает, но на игровом поле также присутствуют и другие объекты с коллайдерами, и с ними такой трюк уже не срабатывает т.к я не смогу захватить все координаты