Here is the article that has solved the problem: Setting up Unity for pixel-perfect 2d project .
Here is the code that I've attached to my character (the camera is a child GO of it):
Vector3 roundPos = new Vector3(RoundToNearestPixel(transform.position.x, Camera.main), RoundToNearestPixel(transform.position.y, Camera.main), transform.position.z);
transform.position = roundPos;
public static float RoundToNearestPixel(float unityUnits, Camera viewingCamera)
float valueInPixels = (Screen.height / (viewingCamera.orthographicSize * 2)) * unityUnits;
valueInPixels = Mathf.Round(valueInPixels);
float adjustedUnityUnits = valueInPixels / (Screen.height / (viewingCamera.orthographicSize * 2));