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

 はじめに

前回に決めた方針に従い、主砲砲撃に関しての処理を創りこみました。

最少限機能の主砲砲撃処理の創りこみ

TankinputgModule.cs, TankKeyboardInput.cs, TankTouchInput.cs, TankShooting.cs の関連性を読み解く中で、まずはmac-keyboardから主砲砲撃の方位と仰角を制御可能し、主砲砲弾を発射する処理を創りこみました。

TankShooting.csを見ると多数の[SyncVar]記述があります。そうです。ネットワークで同期するための変数定義です。なんやら意味不明のコードが多々ありますが、今回のネットワーク対戦ゲーム検討アプローチの良い点は、いちいち中身の理解をしなくても必要な機能を実現できる点です。

ちょっと一部ひっかかる部分もありましたが、キーボードで砲塔旋回、主砲仰角制御と主砲発射の制御を実現して主砲射撃を可能としました。

ネットワーク対戦モードでの主砲射撃の実際

まだ砲弾が元のTANKSNETWORKアセットの戦車の砲弾が1発だけ飛ぶ仕組みなので見た目はしょぼいですが、基本的にはネットワーク対戦で使える砲弾であり、各種同期や同期遅延対策が処理されたものとなっているはずです。

まずはネットワーク対戦モードでの動作確認です。

ちょっわかりにくいかも知れませんが、手前が自分のビスマルクです。向こうの小さな船影はネットワーク対戦相手の戦艦大和です。自分のビスマルクがちょうど主砲を1発発射した瞬間の画像です。主砲はまだ船体の中心から1発だけ飛ぶようになっていますが、主砲の方位と仰角の制御はmacのキーボードで制御して発射指示を出して売っています。

逆にネットワーク対戦の大和側のmac-appを操作して自分のビスマルクを砲撃してみます。数秒かけて飛翔してきた敵砲弾がビスマルクに衝突する直前の画像です。

現在のネット接続はmacの中で接続されているのでネット遅延はほぼありません。まあ最高速の状態です。なので敵戦艦の動作や敵砲弾、自砲弾の動作でカクカクするような通信遅延の影響はほとんど見えません。まあ、この点に関してはもう少し先での確認となるかと思います。

シングルプレイヤーモードでの主砲砲撃確認

ネットワーク体制での主砲砲撃の動作確認は行いましたが、同時にシングルプレイヤーモードでの動作確認も同時に行います。TANKSNETWORKアセットの設計方針がシングルプレイヤーモードもネットワーク対戦モードをベースに共通化で創っているためでうs。

アプリ最初のメニュー画面でシングルプレイヤーモード(TANSKNETWORKではTRAININGメニューとなりますが)で動作確認をします。

わかりにくいですが、戦艦ビスマルクから主砲が発射された瞬間の画像です。めでたく動作したことが確認できました。

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

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

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

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

4.主砲射撃制御 (今回これのノウハウを獲得)

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

主砲射撃制御のコア部分がまあできたので下記2点となります。

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

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

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

まあ数時間で主砲射撃制御が実現できましたので、次はタッチ操作を実現するのが良いと感じます。現在はmac-appとunity-editor on macの2つのアプリでネットワーク対戦での確認をしていますが、タッチ操作を実現できれば複数のiphone,ipadでの動作も可能となり、まだまだ家庭内LANの条件ではありますが接続端末数増に加えてネットワーク条件の多様性がでてきますので良い方向かと思います。なのでそれを検討してみる予定です。

最後に

もう少し難儀するかと思いましたが、思いのほか早く主砲射撃制御が突破できました。ちょっと嬉しい感じです。まあ検討を続けます。

ところで、今日、ちいさな女の子のめんどうを見なければならなかったのですけど、そんときにちょっとTankShooting.csのコードをipadで見ていて、そしたら自分不得意な[SerializeField]がたくさんあったのでやだなと思ってちょっと声を出してSerializefieldと読んだのです。そしたらその子が急にげらげら笑いだして「お尻洗いなさい」「お尻洗いなさい」と言い出したのです。なるほど..面白いですね。子供は素敵だな..驚いたです...汗.

以上