飛行機レースゲームを作る(7):計器の実装

計器の実装

 飛行計器として、高度計、速度計、姿勢指示器と方位計を実装します。

ja.wikipedia.org

高度計と速度計

 目盛り画像を用意して機体の高度及び速度に応じて、上下にずらして表示します。目盛り画像を用意することが一番面倒なことかもしれません。

[高度計]          [速度計]


姿勢指示器

 機体のロール方向とピッチ方向の回転角を表示します。➁は固定表示。ロール角度に合わせて、①の画像を回転します。ピッチ角度に応じて➂を上下にずらして表示します。(小さくて見えませんが➂のセンター部分に-90°から90°の角度の目盛りを配置しています。)①➁➂の画像を重ね合わせて、④の画像でマスクして、丸く切り抜いて表示します。

 

 

方位系

 機体の方位を反映して表示します。➁は固定表示で、機体の方位を反映して、①の画像を回転します。①➁の画像を重ね合わせて、➂の画像でマスクして、丸く切り抜いて表示します。

 

飛行計器の実装デモ

 飛行操作と飛行計器の動作確認。実際に飛行操作しているときには、計器を見る余裕はないかもしれないのですが、リプレイの際には操作を確認することができます。

youtu.be

今は、空しか見えない中を飛んでいますが、背景物を配置することで、実際のレース会場のような雰囲気が出せればよのですが。

 

次回は:飛行機レースゲームを作る(8):完成?

 

飛行機レースゲームを作る(6):タイム計測とリプレイ機能

タイム計測とリプレイ機能

 タイム計測はシンプルで、当たり判定用に配置したプレーンを使って、スタート地点のゲートでタイマーをスタートして、ゴール地点のゲートでタイマーをストップすればOK。また、ゴール時には途中で発生したペナルティタイムを加算します。

youtu.be

 脱線:飛行機のレースは、自動車のレースとは違い道路のような、「ここを走ればよい」という経路がありません。このため、矢印で飛行経路をガイドしました。

 

vazokggb.hatenablog.com

 実際のコースでは、同じゲートを2回以上通過する場合もあり、それを一度に表示してしまうと飛行経路の矢印が交差し、とても分かり辛くなります。

 

 そこで、同じゲートを通過するかどうかを境に(実際には1ゲート手前で)、飛行経路の矢印を分割し、ゲート通過をきっかけに飛行経路を更新していくことにしました。

youtu.be

 リプレイ機能は、上の動画そのものです。実際にプレイヤーが操作した時の、飛行機の位置座標と姿勢を記録しておき、プレイヤーの操作情報の代わりに、飛行を制御するコードに与えることで、飛行を再現します。この実現には下記の記事が大変参考になりました。

gametukurikata.com

 あとは見せ方として、カメラをどこに配置するか、になります。プレイヤーが飛行操作を行う場合は、飛行機の後方にカメラを固定しますが、リプレイ時にはそれっぽく見える位置に配置した方がよさそうです。

 そこで、各ゲートを通過する前後で、カメラの位置を切り替えることにしました。

それには、各ゲートの位置をつなげたパスを生成しておき、ゲートを通過してから数秒後に、通過ゲートと次のゲートの中間地点を、生成したパスから自動計算して、カメラ位置を切り替えます。カメラは飛行機を追従するように設定しておけば、それっぽいカメラワークになります。

youtu.be

 これが最善の方法ではないとは思いますが、まず一案として。AirRace のリプレイをさせることが、このゲーム作製の一番の動機だったので、TV中継のような固定カメラからのズームショットも見られるようにしていきたいと思います。。

 

次回は:飛行機レースゲームを作る(7):計器の実装

 

飛行機レースゲームを作る(5.1):エアレース2023開催のニュース

次回は(6):タイム計測とリプレイ機能の予定でしたが、

少々遅ればせながら2023年のエアレース(AIR RACE X)開催の計画のニュースを。

 

otakei.otakuma.net

詳細は上記の記事のとおりですが、リアルラウンドとデジタルラウンドで構成。

第1戦をデジタルラウンドで2023年10月15日に開催し、2024年にリアルラウンドを追加。2025年には2019年以来となるWorld Championshipの開催を計画しているとのこと。2023年8月に改めて計画の発表があるようです。

 

デジタルラウンドではAR技術を使って遠隔地での競技の観戦ができるようです。実現を期待しております。

 

次回こそ、飛行機レースゲームを作る(6):タイム計測とリプレイ機能

 

 

飛行機レースゲームを作る(4):コース準備

Air Raceのルール
バルーンでできたパイロンを指定された順序で通過する。パイロンには、単一のものと、2つセットでその間を機体を平行に維持して通過するもの、2種類がある。

 

シケイン

 

ターン

 

 

バーティカルターン

 

フライト例の動画

youtu.be

これで、コースの準備ができましたので。

次回は、エアレースのルールを参考にして、ゲームの処理を考えます。

 

次回:飛行機レースゲームを作る(5):エアレースのルール反映

 

飛行機レースゲームを作る(5):エアレースのルール反映

エアレースのルール反映

1. 既定の高度の範囲を通過すること

これはパイロン間にプレーンを配置し、当たり判定により通過をチェックしています。

高度が低すぎる場合はDQ(失格)になりますが、今回のゲームでは水面に衝突でレース中断としました。

 

2. パイロン通過時の機体姿勢は水平であること

機体姿勢の不良は、一回ごとにタイムペナルティ(+2秒)が課せられます。

許容範囲は±10°であり、下図の範囲であればペナルティ無しです。

これは、パイロン間に配置したプレーンとの当たり判定時に機体の傾きを調べるだけなので簡単ですね。


3. パイロンとの接触でも、ペナルティタイム(+3秒)が加算されますが、2回目まで。

3回目の接触でDNF(完走できず)となります。

当たり判定にはコースを構成するパイロンのオブジェクトにSAMeshColliderBuilderでコライダーを作成しています。大変便利でした。

 

実際にはスタートゲート通過時の速度や、ターンの際の最大荷重(G)などが規定されていますが、今回作成するゲームではペナルティ上述程度だけです、

コース逸脱もDNF扱いでなのですが、コース逸脱の判定は難しいので、ゲート間の所要時間の上限を規定して、それを超えたらDNFとしました。

 

次回:飛行機レースゲームを作る(6):タイム計測とリプレイ機能

飛行機レースゲームを作る(3):Gyroで機体の姿勢制御を行う

Gyroセンサー:
3軸の角速度を検知できるセンサー。スマホの動きを検知するセンサーとしては加速度センサーのほうが一般的ですが、加速度センサーでは検知できない動きを検知することができます。きっとほかに方法があるとは思いますが、今回はGyroを使います。

飛行機の3種類の動翼、エレベーター(昇降舵)、エルロン(左右補助翼)、ラダー(方向舵)をコントロールするために、Gyroの3軸センサーの値を使います。

 

youtu.be

 

実際には補助動翼は動くだけで、スマホの傾きを機体の向きに反映させます。

このとき、スマホの傾きをそのまま機体の傾きに反映すると、機体の制御が難しくなります(フラフラして安定しない)。このため、スマホをわずかに傾いているときは、機体の傾きには少ししか反映させず、大きく傾けたときに、機体を傾けるようにします。

エレベーター(昇降舵)でピッチ、エルロン(左右補助翼)でロール、ラダー(方向舵)でヨー方向の飛行機の機体操作を行います。

 

youtu.be

 

これで機体の向きを制御することができたので、あとは機体を現在向いている方向に前進させれば飛行機を飛ばせます。

 

ただし、対象物がないと、前進しているのかどうかわかりませんね。

 

次回:飛行機レースゲームを作る(4):コース準備

 

飛行機レースゲームを作る(2):どんな機体を使うか

まず、ゲームに使う飛行機の機体なのですが、Air Raceにはレシプロ機が使われています。いずれの機体もデザイン、配色ともに洗練されていますが、もう少し古風でユニークな期待として、先尾翼機(カナード機、エンテ型とも呼ばれます)を選びました。

 

震電 (J7W1):

第二次世界大戦末期に日本海軍が試作した局地戦闘機。1945年(昭和20年)6月に試作機が完成、同年8月に試験飛行を行った段階で終戦を迎えました。

 

こちらはイタリア版。S.S.I. S.S.4

 

こちらは、アメリカ版。カーチスXP-55アセンダー

いずれも独特なデザインは大変魅力的に思われます。戦闘機としての性能は、私にはわからないのですが...

 

先尾翼の機体は他にもあると思いますが、古い雑誌の資料やプラモデルを持っていましたので、震電(J7W1)を採用。

LightWaveでモデルを作成し、Unityにインポートしました。

こんな感じです。

 

次の記事:

・飛行機レースゲームを作る(3):Gyroで機体の姿勢制御を行う