Unity (2021.3.2f1)
はじめに
ForceMode
によって力の加え方が異なります。
モードは4種類あるんですが、違いは2つでした。
- 質量を考慮するか
- 速度の計算方法
です。この組み合わせで4種類てことでした。
表に表すとこんな感じになります。
モード | 質量の考慮 | 速度の計算方法 |
---|---|---|
Force | する | 平均 |
Acceleration | しない | 平均 |
Impulse | する | 瞬時 |
VelocityChange | しない | 瞬時 |
質量の考慮とは?
質量とはRigidbody
のMass
のことです。
つまりMass
の数値によって動作が変わるかどうかというものです。
モードがForce
であればMassの値が変わると動作も変わります。
具体的には内部パラメータであるvelocity
が変わります。
※他にもあるかも
モードがForce
でMass
の値が1とAcceleration
は同じ動作をしていました。
Mass
の値が0.1だと力がveloctiy
が1/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が全く効きませんでした笑。