Unityでネットワークゲームを創りたい(UNET)-10

はじめに

ちょっと前回から間が空きましたが、その理由は旅行に行ったことと地味な創りこみを行ったためです。若干の進展がありましたので報告させて頂きます。

いよいよ戦艦主砲発射処理の飾り開始

前回で予告ではネットワーク遅延対策調査が次の技術課題でしたが、ちょっと突然の方針変更で、戦艦主砲発射関連を進めることにしました。前回ではTANKSNETWORKアセットのタンクの砲弾は飛ばせるようになりましたが、戦艦の主砲砲弾を飛ばすようにしなければ意味がありません。ネットワークゲームとしての同期問題等で何が潜んでいるか不明ですが、今回のネットワークブラックボックス化アプローチではあまり影響なく進めるはずです。ということでまあやってみました。

基本方針

とにかくネットワーク機能としてはTANKSNETWORKアセットのタンクの砲弾をそのまま活かす中で、迫力ある戦艦主砲砲弾の処理を付加することにあります。ポイントはネットワーク上は元々のタンクの1発の砲弾だけが飛ぶことになります。その機能は既にUNETのプロによって完成されているのですからそれは助かります。

戦艦主砲制御

ユーザー操作の戦艦にbattleship_houtou_control.csというスクリプトを付加しました。ここでは戦艦主砲のターゲット処理とそれに伴う主砲塔および砲身の制御を行います。これを何種類もの戦艦に対応できるように一般性を持たせて創りました。

船首側主砲塔数、船尾側主砲塔数、砲塔あたりの主砲数を戦艦種類毎に設定可能なパラメーターとして創りこみます。まあすてきで洗練されたC#のコード郡の中にいきなりベタで幼稚なコードが割り込む感じですが、極力追加部分は分離するように構築しています。

戦艦主砲砲弾の準備

砲弾のメッシュを準備して(前の戦艦アプリの砲弾の流用ですが)、プレファブ化して置きます。これを主砲発射と同時に主砲砲身の先頭にInstantiate(実体化)させます。主砲砲弾の航跡を示すためにTrailRendererを付加しておきます。

最初は実体化と同時に、基準となるタンクの砲弾(ネットワーク対応されている)の子オブジェクトとして様子を見たのですが、なんかすごく回転しているようで、気にいらない動作となりました。元のタンク砲弾への修正は一切行いませんので、このアプローチは捨てて、実体化したら基準タンク砲弾からのオフセット位置を維持するスクリプトを創って砲弾プレファブに付加しました。そしてこれで動作確認するとまあ良い感じで動作しました。

肝心の主砲砲弾は先へ飛んでしまっていますが、主砲弾の航跡が左側に見えていると思います。実際にはかなり良い感じでの砲弾飛翔となっています。

主砲発射火炎パーティクル準備

なんか淋しかったので主砲発射時の火炎パーティクルを準備しました。前の戦艦アプリからパーティクルをエクスポートして、このアプリでインポートして創りました。なんかちょっと問題が多々ありますが、最終的な調整を行うことを前提に先へ進めます。

今日はここまでとなります

技術的な道筋が見えると今度はいろいろと創りこみが必要となりますが、こちらは地味に時間がかかります。まだシングルプレーヤーモードでの動作確認しかできていませんが、ネットワークモードでの動作確認は次のフェーズということで今日はここまでとさせて下さい。

現在できていることの整理

1.3種類までの軍艦を選択して登場できる仕組み

2.シングルモードで戦艦を自在に操艦操作する

3.ネットワーク対戦モードで戦艦を自在に操作する

4.主砲射撃制御:戦艦主砲による同時斉射処理およびパーティクル創りこみ

5.スマホ上でのタッチ処理による操作

現在できていないことの整理

1.インターネット接続を想定した遅延時間増の場合の動作調整

次に実現を検討すべきことを考えてみる

ネットワーク遅延のシュミレーションの前に、戦艦制御の創りこみを優先してみます。戦艦の航跡処理や搖動処理や主砲砲弾処理等々です。そのほうが見映えが良くなるのでやる気がでるからです。

最後に

なんかネットワーク機能をブラックボックス化して進むというやり方がうまく行きつつあるような予感があります。ですがまだ乗り越えるべき課題は多々あります。地道に頑張ります。

進展があればここでまた報告させて頂きます。

以上

P.S. 今日はベルギー対フランス戦です。ベルギーには頑張って頂きたいものです。