It is probably going to end up being some differential and harder math.
I would fake it with the use of camera.WorldToScreenPoint and the gameObjects bounds.
I have made a [5009-cameratest.zip|5009] as an example, with a plane and a camera.
this is the jist of it
// b = bounds, cam = camera
// LookAt gives a forward vector towards the object.
cam.transform.LookAt(b.center);
// This is the point we use to correct after.
point = cam.WorldToScreenPoint(go.transform.position + new Vector3(b.extents.x, 0, 0));
if (correct)
{
Vector3 newPosition = transform.position;
float screenCenter = Screen.width * 0.5f;
float halfScreenWidth = screenCenter * 0.5f + Screen.width * 0.5f;
// the plus 1 is so we don't jump back and forth.
if (point.x > halfScreenWidth + 1)
{
newPosition += -cam.transform.forward * Time.deltaTime * speed;
}
if (point.x < halfScreenWidth - 1)
{
newPosition += cam.transform.forward * Time.deltaTime * speed;
}
cam.transform.position = newPosition;
}