時間と高さでジャンプをコントロールする方法が意外に難しい②


前回のその①では、ジャンプ動作をスクリプト化する方法をコード付きで紹介しました。
今回はそれをもとに、ジャンプを時間と高さでコントロールする方法を考えてみたいと思います。

まずは復習編

$$y={v_0}t+\frac{1}{2}a{t^2}-①$$
$$v^2-{v_0}^2=2ay-②$$
$$v=v_0+at-③$$
物理の教科書ではよく見る等加速度直線運動の公式です。
前回は①の実装を行いました。
初速のコントロールはaddForceとほぼ同じとなるので、
時間と高さによるコントロールを式を変形しながら考えます。

式を解いてみる

頂点\(=Y_{max}\)、頂点に着く時間を\(T\)とします。
頂点にに着くと速度は0になるので、②と③に\(v=0\)を代入し変形すると
$$-{v_0}^2=2aY_{max}-②’$$
$$-v_0=aT-③’$$
\(②\div③\)を計算すると\(v_0=\frac{2Y_{max}}{T}-④\)、
これを②’に入れて計算すれば\(a=-\frac{2Y_{max}}{T^2}-⑤\)となります。
④と⑤のTは頂点に達する時間です。
そこで戻るのがこの式
$$y={v_0}t+\frac{1}{2}a{t^2}$$
普段、aにはg=-9.8が入っています。
そのため、最高到達点を変えるためには\(v_0\)を変えるしかありません。
しかし、\(v_0\)と\(a\)に先ほどの④、⑤を入れると時間と高さでジャンプをコントロールできます。
$$y={\frac{2Y_{max}}{T}}t-{\frac{2Y_{max}}{T^2}}t^2$$
$$※Tは最高到達点までの時間。ジャンプ時間の\frac{1}{2}を入れる$$

実装する方法

上では\(y\)に\(v_0=\frac{2Y_{max}}{T}\)と\(a=-\frac{2Y_{max}}{T^2}\)を代入した式を紹介しました。
が、実際にはそれを書くのは大変なので・・・。
今回は、①と②でそれぞれを計算して代入する方法をとっています。
①と②はキーボード入力があった際に計算され、ジャンプが終わるまでは変わらないようにしてます。
ここに関しては、ゲーム演出との関連がありそうですが・・・。

実際にやってみた

ジャンプの時間を一緒にしてみた。


ジャンプ時間をすべて2秒、飛ぶ高さを変更しています。
高さは左を1とすると2倍、3倍になっています。

ジャンプの高さを一緒にしてみた。


次はジャンプの高さを一緒にしてみました。
最高到達点に達する時間が違うのでややわかりにくいですが・・・。
時間は左から2秒、4秒、6秒になっています。

まとめ

時間と高さでジャンプをコントロールする方法を紹介しました。
物理やら数式の変形やらで意外に難しかったですが、
実装すると結構使えるのでいいのかなと。
みなさんもぜひトライしてみてください。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

トップへ戻る