Вы можете сделать это с помощью некоторой векторной математики.
Сначала найдите смещение объекта в мировом пространстве вдоль его локальных осей x и y:
float xOffset = Vector2.Dot(transform.position,transform.right);
float yOffset = Vector2.Dot(transform.position,transform.up);
Затем зафиксируйте xOffset
до границ:
xOffset = Mathf.Clamp(-boundX,boundX,xOffset);
Затем примените смещения обратно к их осям и сложите их вместе, чтобы получить позицию:
transform.position = xOffset * transform.right + yOffset * transform.up;
Всего:
float xOffset = Vector2.Dot(transform.position, transform.right);
float yOffset = Vector2.Dot(transform.position, transform.up);
xOffset = Mathf.Clamp(xOffset, -boundX, boundX);
transform.position = xOffset * transform.right + yOffset * transform.up;