(12/25)追記しました。
雑談みたいな記事になると思うので、適当に聞き流していただけると幸いです。
(自分の)1年前は基本的にRigidbodyのVelocityをいじってプレイヤーを動かしていました、こんな感じ。
void FixedUpdate()
{
rigidbody.velocity = new Vector3(speedX, rigidbody.velocity.y, speedZ);
}
しかし、これは公式だと非推奨だったようです(FPSのジャンプなどの処理に使うのが正しいらしい)。
ただ、初心者はこれでも良いんじゃないかなと思います、現在3DでAddForceでの移動を挑戦して、ある程度まともな動きが出来るようになりましたが、結構調整が難しいです。
なんなら公式のStandard Assetでもvelocityに代入して動かしていた気がする。
個人的に思うアクションゲームでのVelocityを弄る問題
Velocityを弄れば便利ですが、これだと出来なくなるであろうことがあります(できたらごめんなさい)。
それは、横や前へのバウンドです。
と言ってもパッと例が思い浮かばない…どうしよう…近くで爆発したときに吹き飛ぶみたいな感じ…?代入してなければAddForceで適当に吹き飛ばせばそれっぽくなるはず…。
あと、書いてる途中で気づきましたが、他のRigidbodyとColliderを持つオブジェクトから押されても恐らく殆ど動きません、代入してしまっているので。
先程のコードは
rigidbody.velocity = new Vector3(speedX, rigidbody.velocity.y, speedZ);
という感じで、velocityのXとZを直接代入してしまっています。
velocityを代入してしまっているので、上書きされてしまい、代入した動きしかできません。
ちなみに、Y軸は自身のvelocityの値を代入しているため影響は受けないのでジャンプやトランポリンなどの真上に動く処理はバッチリできます。
(個人的)AddForceの1番の壁
めっちゃ滑ります。対策が必要です。
その点Velocityではガッツリ止まってくれます。
摩擦を弄ると…
摩擦を弄って滑らなくしても良いのですが、そうすると壁に引っかかってしまったりします。
参考になるサイト様。

難しい。
余談
自分の成長の為に、現在作っている3DのゲームではVelocityを使わない方針でやっています。
成長のためとはいえ、無駄かなとも思いましたが、今さっき試しに坂道から障害物が転がってくるステージを作ったところ、物理演算の影響を受けて妨害される処理を作ることができたので、多少は無駄ではなかったっぽく少し安心しました。
芸が細かくなるような挙動にしたいときはAddForceでこだわってみるのは大アリだと感じました。
ただ、滑るのを何とか抑えている訳なので、そこでの抑える力は結構大きく、これにより遠くに吹っ飛ぶなどの処理は少し難しくなります。
吹っ飛ぶような処理を作る場合は、吹っ飛んでいる判定を追加して、抑える力を弱めたりしたら結構良い感じになるかな~…。
追記(12/25)
rigidbody.velocity = new Vector3(0,0,0);
のような状態でも、他から強い力が加わったら移動しました。
どういう原理かわかりませんが、重さや外からの力のAddForceの調整を行えばRigidbodyでも他からの力をある程度受けられるかもしれません。
よくわからん…。
予想ですが、FixedUpdate→物理演算 の順に実行されるっぽいので、FixedUpdateで0にしても1回の物理演算で動かした分だけVelocityが変化して動くのかも…?
コメント