はじめに
ぜんぜんさぼっている訳ではないのですが、まあ先へ進めていないというところです。
具体的にはネットワーク対戦モードへの対応を始めているのですがなかなか思い通りにならないというところです。自分の考え方の整理を含めて少し報告させて頂きます。
ネットワーク対戦モードへの対応
前回まで創ってきたシングルプレイヤー用の戦闘シーンをベースにしたネットワーク対戦用のシーンを使ってネットワーク対戦モードで動作させます。具体的には、前にも説明したように、最初にmac用プログラムをビルドしておき、まず軌道します。そしてunityEditorでも動作させることで同時に2つのアプリを動作させます。
これによりネットワーク接続された二つのアプリが動作することになります。
TANKSNETWORKINGアセットのロビー機能はしっかりと動作してくれており、ひとつのアプリでネットワーク対戦ゲームを起動し、もうひとつのアプリでゲームをサーチしてジョインする作業まではすんなり動作します。(全くいじっていない部分なので当たり前というところですけど)
そしてジョインしてネットワーク対戦シーンが起動すると、エラーのオンパレードとなってしまいました。この中身を見ながらひとつずつ直していくという作業がネットワーク対応ということになります。
ちょっと気になるのが、「急がばまわれ」という言葉の存在。まあ今更気にしても仕方がないので先へ進みます。
ネットワーク対戦での戦闘シーンの登場人物達
先ずネットワーク対戦シーンの登場人物を調べておかなければなりません。これを眺めて、先日創ったシングルプレイヤーモードとの違いを知っておかないとなりませんからね。
ヒエラルキーを拡大すると下記となります。(ちょっと余計なものが多々入っていますが)
ネットワーク対応での基本的な考え方
戦艦が2隻登場するとして、1隻はプレイヤー、1隻はネットワークプレイヤーが操作をします。これをシーンの中で区別するためにはhasAuthorityフラグがあります。trueならプレイヤーが操作する対象となる戦艦であることとなります。
ネットワークゲームではこの2隻の戦艦はNetworkmanagerから実体化(spawn)される必要がありますのでプレファブで準備しておく必要があります。一方、シングルプレイヤーモードでの敵戦艦は、前回も書きましたが、戦闘シーンの中にあらかじめベタで戦艦が置かれていることになります。ただしこの戦艦も操作するスクリプトは同じでありたいので、同じプレファブを使ったものとする必要があります。
結果として、戦艦の操作(移動、主砲砲撃)を制御する場合に考慮すべき戦艦の状態は下記の4つとなります。
◆ネットワーク対戦モード
①プレイヤー自身が操作する戦艦
②ネットワークプレイヤーが操作している戦艦
◆シングルプレイヤーモード
③プレイヤー自身が操作する戦艦
④プログラム(AI)で制御される敵戦艦
TANKSNETWORKINGアセットのマニュアルによれば、上記①と③は同じ仕組みで動かすと書いてあるので実質は①、②、④の3つとなります。
前回までは③と④で何とか動かしてきたものを①、②に展開するわけですが幾つもエラー多発で苦しんでいる状況です。
戦艦の役割の区別方法
今日はこれにはまってしまって1日棒に振りました。
ネットワーク対戦モードでは、アプリが起動しても(awake(), start()を経てupdate()に入るという意味)、ネットワーク側での調整が遅れるのですよ。これを考慮せずに創ると、プレイヤー操作の戦艦が存在しないこととなってしまいます。これでずっと混乱していました。
ネットワーク対戦モードでは、戦艦の役割が決まるまでに時間がかかるのです。
なので、立ち上がった後も、役割が決まるまでは待つ仕組みを入れる必要があります。具体的にはhasAuthorityフラグです。
シーン内の戦艦(最大4隻)の中のどれかがプレイヤー操作(hasAuthority = True)なのです。それを見つけるまではupdate()内で待たせる創りとします。そしたらやっと正しく設定されるようになりました。
継続して実施すべきこと
まだ全然ネットワーク対戦モードでは動けていませんのでこれを連続対応します。
①、②、④をひとつのスクリプトで場合分けしながら整合とって動かすのにてんてこ舞いな感じなのでまあ頑張ります。
現在できていることの整理(進展無し)
1.3種類までの軍艦を選択して登場できる仕組み
2.シングルモードで戦艦を自在に操艦操作する
3.ネットワーク対戦モードで戦艦を自在に操作する
4.主砲射撃制御:戦艦主砲による同時斉射処理およびパーティクル創りこみ
5.スマホ上でのタッチ処理による操作
6.シングルモードでのプレイヤー戦艦の主砲照準と射撃処理
現在できていないことの整理
0.新規【最優先】unityハングアップ問題の回避策獲得
1.インターネット接続を想定した遅延時間増の場合の動作調整
2.今回創りこんだ戦艦周りの各エフェクトのネットワーク対戦での確認
3.ネットワーク対戦モードでの敵戦艦の主砲射撃処理
次に実現を検討すべきことを考えてみる
ネットワーク対戦モードの動作実現。
最後に
いやあ、時間がかかります。ブラックボックス化アプローチなわけですけど、本質理解が無い上にプログラムのコーディングが高級すぎて本当に自分には難しい状況です。時間がかかりすぎる。牛歩状態にあるということ。
ここ1週間位で、このままネットワークゲーム実現に進むのか、一旦中断して、他のアプリ開発を実施するかを決める必要がありそうな予感です。とにかく時間がかかりすぎるからですね。
以上
参考:海戦関連のアプリを紹介しておきます。
戦艦決闘空間:何といっても第一人気です。
潜水艦決闘空間:最新アップデートでかなり好評価されています
空母決闘空間1942:かなり良くできていると評価を頂いています