自作アプリ紹介: 「航空母艦決闘空間1942」-2
空母アプリ開発紹介の第2回目です。前回では索敵シーンの創り方にフォーカスして説明させて頂きましたが、今回は艦載機の実現手段について説明してみようと思います。
艦載機用アセットの紹介
アセットストアでいろいろと対象とする艦載機のアセットを探しました。
この99艦爆のモデルはすばらしいです。このアセットがあったので空母決闘アプリの開発が進みました。この飛行機をメインのアセットとして他を展開していきました。感謝です。
他にも第二次世界大戦時の航空機アセットは幾つかあるのですがドイツが多いですかね。日本のものは少なくて、少し苦労しました。ゼロ戦は下記のアセットから使わせて頂いています。ちょっとテクスチャが素朴すぎるので少し加工しています。
アセットストアで97艦攻を探しましたが見つかりませんでしたので結果として99艦爆のアセットを編集させて頂いて創りました。実際の写真や図面をネットで調べて創りました。本当に3Dモデル創りは大変な作業です。アセットストアでのアセットクリエーターの皆様にはありがとうございます。
米国側の航空機はもっと困りました。当時の米国機動部隊の艦載機はTBDとドーントレスなのですけど、どんぴしゃのものがありませんでしたので下記のアセットから編集させて頂いて艦攻と艦爆を創りました。なのでちょっと似ていないのが残念です。戦闘機と索敵機も史実とは違うでしょうが下記を使いました。
と思って久しぶりに航空機アセットをみたらなんとドーントレスアセットが登場していました。この空母アプリをアップデートするときには使わせて頂きたいです。何といっても当時の空母に対して最も強大な戦果を上げた艦載機ですからね。
というような作業を行って航空機アセットを準備しました。
魚雷と爆弾と機銃の準備
魚雷と爆弾はメタセコイア3Dで自分でモデリングして創りました。テクスチャ付で3DS形式でエクスポートしたものをUnityで読み取るのが普通です。実際には「戦艦決闘空間」のV2のアップデート時に、湾内で休む6隻の敵正規空母軍を霧の中で戦艦大和が湾内に突入して撃滅するというステージを創ったのですが、そのシーンを創るのに、時間がかかって空母から艦載機が発艦すると大和を攻撃するというシナリオになっていて、ここで爆弾と魚雷が必要だったのです。このときの艦載機は自分でメタセコで創ったええかげんなものでしたけど。
機銃の処理は自前パーティクルでしこしこ創りました。一定期間ある周期で連続的に線状のパーティクルを発生させるという処理です。思いのほか良くできましたね。戦闘機だけではなく、艦船の対空砲火の処理としても活用しました。
艦載機および魚雷・爆弾・機銃制御用スクリプト作成
素材は揃いましたので、これをリアルタイムシュミレーション空間で動かすためのスクリプトを準備します。
下記項目で説明している魚雷攻撃は10秒、急降下爆撃は17秒に出てきます。
個々の航空機は飛行の目標とする座標を持っていて、その座標に近づくと次の目標座標が設定されるという仕組みで飛び続けるように創っています。
艦攻による魚雷攻撃
艦攻(魚雷攻撃をする雷撃機)の場合には攻撃対象の艦船に対して、その方向とスピードから決まる魚雷攻撃開始位置に対してまず飛行し、その位置に入ると対象艦船への魚雷攻撃コースへ入ります。敵艦船の速度に対応した敵艦船の前方に向けて艦攻は飛行を続け、定められた距離になると魚雷を投下します。
魚雷は魚雷動作を記述したスクリプトが付加された魚雷プレファブをあらかじめ創っておいて、その魚雷プレファブを艦攻の下に実体化(インスタンス化)します。
魚雷制御のスクリプトには、実態化された魚雷を艦攻の動きと同じ向きと速度で空中に切り離され、その後は慣性と重力加速度で移動します。時間が経過すると海面に到着します。海面に到着すると、あらかじめ創ってある魚雷着水水しぶきパーティクルプレファブを実体化します。同時に着水サウンドをワンショット再生します。
海底に入った魚雷は空中の動きとは違う水中モードで移動します。すなわち水中魚雷速度で重力加速度とは関係なく直進する動きをします。
魚雷は敵艦との衝突検知をしています。この時は衝突検知も自作でした。今から思えばUnityのコライダーをうまく使っておけば良かったと思っていますので、これから何か創ろうと考えておられる方は簡単な球・直方体等々のシンプルなUnityコライダーを活用されることを推奨します。
艦船に魚雷が衝突すると、爆発処理を行います。爆発水柱パーティクル(大きな水柱)を実体化させます。同時に爆発パーティクルを実体化し、爆発サウンドをワンショット再生し、艦船に対しての魚雷衝突メッセージを送り、艦船側では損害量を算出し、艦船の爆発による衝撃振動処理を行い、状況に応じて艦船の火災パーティクルを発生させ、損害に応じた速度低下、舵制御低下、傾き、沈没等を行います。そして爆発した魚雷オブジェクトは消滅させます。
一定時間艦船と衝突しなかった魚雷は自分で消滅するようにプログラムしてあります。
艦爆による急降下爆撃
艦爆(急降下爆撃を行う爆撃機)の場合には、攻撃対象の艦船に対して、やはり艦船の移動方向と速度に応じた急降下爆撃開始地点へ、それぞれが接近していきます。
急降下爆撃開始地点に到着した攻撃対象艦船にむけて艦爆は急降下を開始します。あらかじめ定めておいた爆撃高度に達すると、爆弾を投下します。
爆弾は爆弾制御スクリプトを付加したプレファブとして準備してあります。爆弾制御スクリプトには、投下された爆弾を最初は艦爆の向きと速度と同じ向きと速度を持つように設定されます。その後は慣性と重力加速度で自由落下していきます。
爆弾が艦船の衝突すると爆発パーティクルを発生させ、サウンド発生させ、爆発衝撃振動を発生さえ、必要に応じて艦船火災パーティクルを発生させます。傾きや沈没も必要に応じて生じさせます。爆弾は衝突すると自己消滅します。
爆弾が艦船をはずれて海面に落下すると大きな水柱パーティクルを発生させ、そして水音サウンドを発生させます。爆弾自体は自己消滅します。
このようにして爆弾の処理を実現しています。
最後に
今回は空母決闘空間に登場する艦載機と艦載機による魚雷攻撃、急降下爆撃の創り方について紹介させて頂きました。こんな記事を読んで頂ける方がいるかどうかはわかりませんが、自らのやってきたことのメモとして整理して残しておくという意味で書いております。
ところで、Unityアプリ開発を始めてから続けていることがひとつあります。それは開発ノートを付けていることです。毎日発生するいろいろな課題や障害や問題をすべて書いて残し、解決した際にはその方法も書き記す。字がへたくそなうえに走り書きなので、速記ノートのようですが、これがなければとてもじゃないですが開発を進めることができません。特に開発終盤でのテスト時バグの書き出しと解決記入は生命線です。空母決闘空間の初回リリース時には連続番号バグ対応は888番(ノート#5)でしたので苦労の度合いがわかるというものです。この開発ノートの習慣は良かったと思います。特に多いのあAppStoreやgoogleplayの登録の課題とかが多いですけどね。
以上
空母決闘空間1942