【Unity】RigidbodyのMass(質量)を変えた時の変化について
RigidbodyといえばUnityで物理演算を使うのに必要なコンポーネントです。
Rigidbodyでは物理的な特性を設定することができますが、今回はMass(質量)を変化させた時の動きを確認します。
運動にどんな影響が出るのか、ちょっとずつMassの値を変えて試してみました。
環境
macOS 10.13 High Sierra
Unity2018.1.0f2
4月末にUnity2018が出てたので早速使ってみました。
Rigidbodyについて
Rigidbodyのアタッチ方法や各設定項目の説明は、以下の記事で解説しています。
ざっくり言うと、Unityで物理演算を使うために必要なコンポーネントです。
今回はその中でもMass(質量)に注目。
Massについて
日本語訳すれば質量。物体の運動を考える上で、質量の存在は欠かせません。
運動量、運動エネルギー、運動方程式など、物理的な挙動には質量が付いて回ります。
Unityにおける物理演算でも例外はなく、力を加えて位置を変化させる場合には、その計算に質量が使われます。
Rigidbodyではその質量を設定することができます。
転がしてみる
質量の異なるボールを転がしてみます。
用意したボールは以下の6種類。
- mass : 0.01
- mass : 0.5
- mass : 1
- mass : 2
- mass : 5
- mass : 10
質量以外の値はRigidbodyをアタッチした時のデフォルトのものになっています。
ボタンを押すと全てのボールに同じ力が加わり、運動を開始するシーンを作って比較してみました。
ForceModeはImpulseとし、加えた力の大きさは画面左上に表示しています。
massが0.01のボールは力を加えた瞬間に、ものすごい勢いで遥か彼方へと旅立ちました。
逆にmassが10だとほとんど転がりませんね。
質量の大きさによって運動のしやすさが変わっている様子が分かります。
斜方投射してみる
同じボールを使って、力を加える向きを変え、斜方投射してみます。
ForceModeは上と同じくImpulseとし、加えた力の大きさは画面左上に表示しています。
こちらもmassが0.01だと遥か彼方へ。0.5でもあっという間に画面外に行っちゃいます。
massが1くらいになると現実的な動きになってくるかな。
massが10まで行くと、この力の大きさでは飛びそうもないですね。
重力に逆らった運動をする際には質量の大きさがあからさまに影響します。
自由落下させてみる
今度は自由落下させてみます。
RigidbodyのDrag(抵抗)の値は全て初期値の0にしているので、空気抵抗の差異はありません。
物体の落下時は重力のみ加えられている状態とします。
……と、この条件を示した段階で、物理に触れたことのある方は実験結果が予測できちゃうかも。
まあ、そうなるな。
空気抵抗がない場合には、落下時の加速度は質量によらないため、軽い物体も重い物体も同時に落ちます。
日常生活の範囲内だと重いものが早く落ちそうな気がしますが、空気抵抗の差異が大事なんです。
Unity側では物体の大きさに応じて空気抵抗を変えたりはしないので、空気抵抗を設定したい場合は自分でDragの値を変える必要があります。
衝突させてみる
多分massを使うときに一番意識するのは衝突関連じゃないかな。
ざっくりいえば吹っ飛びやすさですものね。
上で使ったボールをそのまま使って転がし、massが1のボールに衝突させてみます。
なお、衝突相手のボール(ピンク)には、同じ大きさの力を逆向きに加えます。
質量によって衝突までの時間が変わるのがアレですが、期待通りの結果になりました。
質量が軽ければmass : 0.01のように吹っ飛びやすくなりますし、質量が重ければmass : 10のように衝突後もあまり加速しません。
なんとなく運動量も保存されてるっぽい動きですね。
なお、mass : 0.01はCollisionDetectionの設定を『ContinuousDynamic』にしないとピンクのボールをすり抜けます。
まとめ
質量の差異によって、物体の運動にどのような影響が出るのかを実験してみました。
自由落下では影響がありませんが、転がったり、投げたり、ぶつかったりといった時には質量の大きさで運動の様子が変わります。
特に衝突時は、衝突相手に与える影響がmassから算出されるので、その比率を何パターンか試した方がいいかも。あまりに現実離れした動きになると違和感が出ますもんね。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】Rigidbodyの各パラメータは何に使われているの?【解説】 2018.05.11
-
次の記事
【Unity】RigidbodyのDrag(抵抗)を変えて水中を表現 2018.05.14
コメントを書く