[Unity] AddForceとvelocityの違いを実験

丁寧な解説をしてくれているサイトはあるが直感的に捉えにくいと思ったので実際にやってみた。
で、Rigidbodyをこちょこちょしてオブジェクトを動かそうと思うなら、やり方は4通り。
  • GetComponent<Rigidbody>().AddForce(Vector3);
  • GetComponent<Rigidbody>().velocity Vector3;
  • GetComponent<Rigidbody>().position Vector3;
  • GetComponent<Rigidbody>().MovePosition(Vector3);

positionMovePosition()はテレポートのような挙動らしいので今は置いといて..(書きました)
AddForce()velocityの違いがいまいちピンと来なかったので並べて転がしてみる。
せっかくなので Start() ,UpDate(), FixedUpdate()でどんな違いが出るかも試してみた
GetComponent<Rigidbody>().AddForce( new Vector3(0,0,2.5f));
GetComponent<Rigidbody>().velocity = new Vector3(0,0,2.5f);
AddFoceが赤、velocityが緑
アップデートしているAddForceは最初こそ遅れているけど、徐々に加速している。同じ加速度じゃないのは、UpdateFixedUpdateで更新頻度が違うから。
velocityは逆にStart()以外は(ほぼ)等速で動いている。本来なら空気抵抗やら摩擦やらで減速するけど、これは
関数が呼ばれるたびに加速度が2.5に上書きされるからほとんど差が出ない。

velocityは加速度プロパティの書き換えで、AddForceは力を足し入れているイメージです。

レースゲームなんかはAddForce,ブロック崩しとかで物理法則に左右されない動きはvelocityが向いていると言えるのかな。

それはいいんだけど、アップデートしてるvelocityが重力を無視して直進するとは思わなかった。

これは...両Updateが呼び出される前にGravityの計算がすでにされていて、それをnew Vector3で0に上書きしちゃってるから落下しないってことかな。
地面をもっと長く作っていたら気づかなかった。

ちなみに、摩擦を0にしたもの。velocityは横並び、AddForceは荒ぶっている

左、仕事しろ。

AddFoceには第二引数で力の加え方を指定できるForceModeなるものがあるので、それも近いうちにレースさせる予定。

コメント

  1. こんにちは。
    いろいろ調べていたらこの記事を見つけたのでコメントします。


    > velocityは加速度プロパティの書き換え

    velocityは速度プロパティの書き換え

    その上の文の「関数が呼ばれるたびに加速度が2.5に」もおそらく「・・に速度が2.5に」

    が正しいと思われます。


    返信削除

コメントを投稿