Input.mousePositionによるx, yの情報を用いて、あるオブジェクトとの距離を一定に保ちつつ、オブジェクトの方向を常に見ながら移動するカメラを実現しようとしています。

移動、向きについて以下のことを試したのですが自然な動きを実現できなかったため、より良い方法を探しています。

・移動:極座標の考え方で入力xをy軸周りの角度θ、yをx軸周りのφに対応させて移動させることを試したのですが、z軸周りの回転ができないため不自然な動きになってしまいます。
・カメラの向き:LookAtによってオブジェクトの方向を指定するだけでは、カメラのyベクトルとworldのyベクトルが直交する位置(オブジェクトの真上、真下)までカメラが移動した際にカメラの上下が反転してしまいます。