いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

100日で50弾! Day 46/ Bullet23:HUDショット2

 100日チャレンジ『100日で50弾!』第23回、HUDショット2です。HUD(ハッド)とはHead Up Display、「車速やナビゲーションなどの情報をフロントガラスに投影してドライバーの視界に直接表示するシステム」です。弾にターゲット枠と空間内の3次元座標がついて回るようにしました。動画を見てください。

youtu.be

スマホの人はこちらの方がよく見えます。

https://www.youtube.com/watch?v=dzrsDbP5Hhk

 前の記事、HUDショットでは弾のz座標だけをパネルに表示しています。

www.omoshiro-suugaku.com

今回は、これもSFアニメでよくある、飛んでくるミサイルなどにスクリーン上で表示されるあの枠(ターゲットフレーム)をやってみました。ついでにその右には弾の空間内の座標を表示します。前回はあまり気にしていませんでしたが、弾が細かく動くとそれに合わせてパネルも動いてしまって、見ていて疲れそうです。そこで、これにも対応しています。具体的には、フレームを弾の右にすぐ表示するのではなく、次のような式で位置を計算するのです。

pos1 = Vector3.Lerp(pos1, pos, deltaTime * 5f);

posは弾の座標、pos1はそれを言わば追いかける点の座標です。このpos1にフレームを表示します。deltaTimeは前回の描画からの経過時間です。pos1はいつもposに向かって動くのですが、前回からの経過時間に比例した変位(位置の変化)をします。Lerp()については前、記事にしています。こうすると弾が急に動いてもフレームがすぐそこへ移動、とはなりません。じわり、という感じです。5fのところは、値を大きくすると追いかける動きが速くなります。いかにもそれっぽい動きになった!! 細かな動きはせず、落ち着いて見ることができます。

 いろいろ勉強になります。単純作業の部分もあるけれど、とにかく弾50種類という量はバカにできません。あちらでもこちらでもほぼ必ずトラブルは起こるし、解決には考えたり調べたりしなければなりません。新しく仕入れた知識を使おうとするとそれもまた大変です。それだけに充実感があります。

 ではここまで!!