LoginSignup
84
39

More than 5 years have passed since last update.

[Unity] 物理的に正しい2Dアクションを作る

Last updated at Posted at 2018-12-15

ゲームではよくプレイヤーがピョンピョン飛び跳ねていますが、これは物理的にどうなんだろうと疑問が湧きます。ぼくが全力でジャンプしても50cmぐらいしか飛びませんからね。
これは単純に考えれば、ミニチュアの世界であれば、ああいった跳躍力も可能かもしれません。じゃあ、

どのぐらいミニチュアならあのジャンプが成立するのか?

これが今回のテーマです。

原理

たしかに虫とかすごい跳びますね。なぜスケールが小さいと跳躍力が増すのか。これは、

  • 質量は尺の3乗に比例する
  • 筋力は尺の2乗に比例する

という事実から説明できます。すなわち、

質量に関しては
小さくなっても密度は変わらないだろう(分子間距離が縮むわけではないだろう)から、密度が一定ならば質量は体積に比例する。よって3乗に比例する

筋力に関しては
筋繊維の縮む力は断面積に比例する。よって2乗に比例する

という理屈から仮定できるわけです。
つまり小さくなれば質量は3乗の勢いで減少し、筋力は2乗の勢いで減少する。筋力も減少するけど質量が減少するほうがずっと勢いがあるので、相対的に筋力のほうが大きくなり、その結果ジャンプ力も高まるよね、というわけです。

計算

Kobito.bnXQiG.png

$身長をT$
$ジャンプの最高到達点をH$

とします。図のように、普通の成人男性のジャンプ力はこのHぐらいでしょうね。
そして

$筋力をF$
$体重をM$
$縮尺率をs$

として、最終的にはこのsを求めます。
sで縮小後の身長、筋力、体重をそれぞれ T', F', M' とすると

$ T'=sT \ (縮尺率に比例)$
$ F'=s^2F \ (縮尺率の2乗に比例)$
$ M'=s^3M \ (縮尺率の3乗に比例)$

こうなります。なお縮小なので、sは1以下の値になります(縮尺率じゃなく拡大率といったほうが正確ですがややこしいので縮尺率で通します)。
次に
$ジャンプの初速をv$
$重力加速度をg$
とすると、物理の公式により

$v-gt=0$
$H=vt-\frac{1}{2}gt^2$

これを解いて

$ H=\frac{v^2}{2g} $

となります。

運動方程式

$ F=m\frac{\Delta v}{\Delta t} $

から

$ F\Delta t = m \Delta v = mv - mv_{0} $

$mv_{0}$は初期速度でジャンプ前はゼロとします。よって

$ mv = F\Delta t $
$ v = \frac{F}{m}\Delta t $

ここで、縮小後の速度を $ v' $ とすると、上の関係を用いて

$ v' = \frac{F'}{m'} \Delta t $

$ F'=s^2F $
$ m'=s^3m $

より

$ v' = \frac{s^2F}{s^3m} \Delta t = \frac{1}{s} \frac{F}{m}\Delta t = \frac{1}{s} v $

これで縮小後の速度が出ました。縮小後の到達高度 H' は

$ H'=\frac{v'^2}{2g} = \frac{1}{2g}(\frac{v}{s})^2 = \frac{v^2}{2gs^2} $

こうなります。

縮小後の到達高度H'が身長のP倍になるとすれば、

$ H'=PT' $

$ \frac{v^2}{2gs^2}=PsT $
$ s^3=\frac{v^2}{2gPT} $

$v^2=sgH $より

$ s^3=\frac{2gH}{2gPT} = \frac{H}{PT} = \frac{H}{T} \frac{1}{P} $

はい。ここで、そもそものHとTの関係を仮定しましょう。成人男性は約60cmのジャンプ力があるそうです。身長を170cmとすると、身長とジャンプ高度の関係は、ざっくり $\frac{H}{T}=\frac{1}{3} $ってとこでしょう。

よって

$ s^3=\frac{H}{T} \frac{1}{P}=\frac{1}{3P} $

通常のピョンピョン跳ぶゲームは、身長の4倍のジャンプをしているとすれば、$P=4$より

$ s^3=\frac{1}{3 \times 4} = \frac{1}{12} $

$ s= \sqrt[3]{\frac{1}{12}} = 0.436790232368149 $

なんと。身長の4倍ものジャンプ力を得るために、たった 43% の縮小で済むという結果が出てしまいました。
果たしてこれは正しいのだろうか!?

検証

縮小前の人体のスペックを、平均的な日本人を想定して次のように定めます。

  • 身長:1.7m
  • 体重:60kg
  • ジャンプ最高到達点:0.567m (身長の1/3)

この到達点に達するために必要な初速は
$v^2=2gH $より $v=3.332666599986663 m/s $

この初速のために必要な力積は
$F \Delta t = mv = 60 * 3.332666599986663 = 199.9599959991998 kgm/s$

これを適用してシミュレーションしてみます。スケールを合わせ、Rigidbody2Dに質量60を設定し、AddForceのForceMode.Impulseに上記の力積、199.96を突っ込みます。

jump00.gif

身長の1/3ぐらいジャンプしてますね。よしよし。

ここからが本番。縮小後の人体のスペックを、先ほど算出した $s=0.436790232368149$ を使用して以下のように定めます。

  • 身長:$1.7*s=0.742543395025853m$
  • 体重:$60*s^3=5kg$
  • 力積:$199.9599959991998 * s^2 = 38.14951 kgm/s$

縮小前の状態から、体重はsの3乗、力積はsの2乗を掛けます。
これらの値を突っ込んで、さあ、どうなるか!

jump01.gif

ちっこい方が縮小人間です。見事に!きっちり身長の4倍のジャンプ力を得ることができました。計算は正しかった!

というわけで

人類は43%の縮小で身長の4倍までジャンプできることがわかりました。計算と実験がピッタリ合うと楽しいな!めでたしめでたし。

84
39
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
84
39