Game Development #9 射撃計算

destroyer_20130330

駆逐艦ユニットをモデリングしました。潜水艦に対抗するために必要不可欠な存在ですからね。また駆逐艦がいることで戦艦の大きさが引き立ちます。駆逐艦には詳しくないのですが、見栄えと砲のバランスからアメリカのアレン・M・サムナー級を参考にしました。

 

battleship_20130326

今回は砲弾に重力を加えてみました。やはり砲弾は放物線を描いて飛んで欲しかったんですよね。水面に砲弾が落ちることで水柱が立つようになりました。

 

math_aiming

これまでは砲が狙う敵の未来位置の計算は、敵と砲弾の座標ベクトルの差を敵と砲弾の移動ベクトルの差で割ることで到達にかかる時間(フレーム)を計算し、敵の移動ベクトルにそのフレーム数を掛けた先がおおよそ敵がいるであろう未来の座標としていました。敵が急旋回しない限り高い確率で当たります。

今回からは砲弾が重力で下がる分、標的に当たりにくくなってしまいます。なので、砲弾を重力で落ちる 分だけ上のほうを狙うように補正します。重力加速度と到達時間で落下する距離を求めればいいわけです。

重力加速度を9.8とすると重力の公式を使って

xフレーム目の速度は9.8 * x

xフレーム目の距離は1/2 * 9.8 * x^2

というわけで到達するまでに落ちる距離が計算できたのでこの距離だけ上のほうに砲を狙わせればよいわけですね。

ちなみに60フレームで計算している場合は1/60秒の重力加速度で計算することになりますが、9.8m/s^2をそのまま使うのなら、1フレームあたりの加速度は9.8 / (60 * 60) = 0.0027222…m/s^2となります。

 

battleship_20130330_gravity

ロケータを敵機の予想位置に置いてみた画像です。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中