質問です

カメラが物体の中に入ったり壁で見えなくなったりしないように、
カメラと操作キャラの間に物がある場合は、
レイを飛ばしてカメラをキャラに近づけるというスクリプトを書きました。

しかしカメラが勢いで物体の内側に入っちゃうとhitの判定が取れなくなるようで、
カメラと物体が接触しているかどうかを追加で判定して回避しないとダメなんでしょうか?

それとももっと根本的にスマートでない部分がありますか?

ちなみにレイはこんな感じで使ってます
Physics.Raycast (transform.position, fwd, out hit, Math.Abs (Vector3.Distance (transform.position, target.position)) - 2f);
(カメラとキャラの距離の長さの)レイを前方に飛ばす感じです。
-2fしてるのはキャラにレイが届くと常に当たりの判定になっちゃうので若干減らしてます