バッテラが如く

プログラミングしましょ!

【Unity】RigidBodyのAddForceの引数であるForceModeとはなんだろうか?

Unity (2021.3.2f1)

はじめに

ForceModeによって力の加え方が異なります。

モードは4種類あるんですが、違いは2つでした。

  • 質量を考慮するか
  • 速度の計算方法

です。この組み合わせで4種類てことでした。

表に表すとこんな感じになります。

モード 質量の考慮 速度の計算方法
Force する 平均
Acceleration しない 平均
Impulse する 瞬時
VelocityChange しない 瞬時

質量の考慮とは?

質量とはRigidbodyMassのことです。

つまりMassの数値によって動作が変わるかどうかというものです。

モードがForceであればMassの値が変わると動作も変わります。

具体的には内部パラメータであるvelocityが変わります。
※他にもあるかも

モードがForceMassの値が1とAccelerationは同じ動作をしていました。

Massの値が0.1だと力がveloctiy1/10になっていたので比例していると思います。

速度の計算方法の違いとは?

前提として速度を求める式が違うということです。

平均の速度

速度 = F/m * Δt

F・・・力  
m・・・質量  
Δt・・・かかった時間 

これをUnityの世界に置き換えた場合は以下のプログラム式になります。

velocity  =  power / * FixedTimestep 

ちなみにFixed Timestepはデフォルトは0.02になっています。

Project SettingsのTimeにある項目で変えられます。

Accelerationは質量を考慮しないため、Massを1に置き換えた計算式になる。

瞬時の特性

速度 = F/m 

F・・・力  
m・・・質量  

これをUnityの世界に置き換えた場合は以下のプログラム式になります。

velocity  =  power / Mass 

VelocityChangeは質量を考慮しないため、Massを1に置き換えた計算式になる。
つまり、powerがそのまま反映されるということ

補足

Rigidbodyのパラメータがどう影響するかの補足です。

Use Gravity

Use Gravityは物理運動をするしないの設定です。

Use GravityがOFFだとAddForce使えないと思いきや使えました笑。

ONにした場合、空気抵抗や摩擦抵抗を受けるようになるため、さらに計算が複雑になります。

なので、ForceModeの動きを検証したいのであればOFFにするといいでしょう。

IsKinematic

IsKinematicがONだとAddForceが全く効きませんでした笑。