はじめに
実はかなり煮詰まった部分があります。unityのプロジェクトの中で戦闘シーンを開いてプレファブの編集作業を実施しようとするとunityがハングアップして死んでしまうのです。メモリの使用量が多い訳ではないのですけどやはり自分のmacのメモリ搭載量が8MBと少ないのが問題でしょうか。これまでのアプリではほとんど問題なかったのだけど、このプロジェクトはちょっと大きすぎるのかも知れません。
関連するプレファブの編集ができないので先へは進みにくいのですができる範囲での改善を行っています。今回はその変更点についてのアップデートです。
主砲砲弾命中処理の創りこみ
これまでちょっと後回しにしてきた主砲砲弾の戦艦との命中処理を今回創りこみます。アプローチ方法は二つあります。①unityのコライダーを使って衝突検知で砲弾が命中したことを検知します。②対象戦艦の座標と砲弾の座標から衝突したかどうかを算出する方式。
今回は①の方式を取ろうと思って進めましたが、元々存在している戦車(TANK)としての砲弾がコライダーを使っているため、主砲砲弾9発が同時に飛ぶと互いに相互干渉して問題が発生してしまいました。ネットワークとして管理されているのは1発の戦車砲弾だけですので、この戦車砲弾と戦艦砲弾の干渉はうまくありません。
結果として②の座標計算方式で戦艦砲弾の対象戦艦との衝突検知を実現しました。まあ前のアプリで使っていた方式ですけど。Transform.InverseTransformPointというローカル座標からワールド座標へ変換する関数を使って戦艦プレファブの相対位置で主砲砲弾が命中したかどうかを検出する処理を実現しました。
プレイヤー砲弾の敵戦艦直撃
敵戦艦主砲弾のプレイヤー戦艦直撃
戦艦との衝突判定のサイズや高さ等を調整することでかなり見映えが良くなった処理が実現できました。とりあえずはこのあたりで良しとして先へ進めますかね。
戦車砲弾と追加した戦艦砲弾の関係
上の図は元々存在するネットワークで管理された戦車砲弾です。本アプリ内では見えないようにしていますが場所はしっかりと処理されます。下の図は戦艦主砲砲弾(この場合には戦艦大和ですが船首側主砲のみ発射なので6発が同時に飛翔しています)の中の特定の1発のみ、元々の戦車砲弾と同じ到着位置になるように飛翔制御された砲弾を示しています。
この仕組みを創っておけばそのうち対応が必要となるネットワーク対戦モードをうまく乗り越えられると考えているのですけど甘いですかね。どうなることやら..
継続して実施すべきこと
細かなことですが、射程距離外のときのプレイヤーへの通知が残ります。
砲撃命中による戦艦のダメージに関しては後回しにします。それはネットワークゲームでも同じ処理をする必要があるからです。
Unityハングアップ問題について
unityハングアップ問題はちょっと心配です。ネットで調べても類似問題は見えてきません。英語を少し見ますかね。メモリはちょっと気になります。8MBですからね。でもmacのアクティビティモニターで見ながら進めていますがそんなにはメモリが不足したようには見えません。それにしても完全ハングアップでmac無応答になってしまうのですから重症です。
プレファブ編集用のシーン(何も存在しないシーン)を創って、そこへプレファブを入れるだけでハングってしまいます。これは困りました。まあ地道に進めます。
現在できていることの整理(進展無し)
1.3種類までの軍艦を選択して登場できる仕組み
2.シングルモードで戦艦を自在に操艦操作する
3.ネットワーク対戦モードで戦艦を自在に操作する
4.主砲射撃制御:戦艦主砲による同時斉射処理およびパーティクル創りこみ
5.スマホ上でのタッチ処理による操作
6.シングルモードでのプレイヤー戦艦の主砲照準と射撃処理
現在できていないことの整理
0.新規【最優先】unityハングアップ問題の回避策獲得
1.インターネット接続を想定した遅延時間増の場合の動作調整
2.今回創りこんだ戦艦周りの各エフェクトのネットワーク対戦での確認
3.ネットワーク対戦モードでの敵戦艦の主砲射撃処理
次に実現を検討すべきことを考えてみる
シングルプレイヤーモードでの主砲射撃照準&射撃処理の完成度向上(まだ継続)。
最後に
unityハングアップ問題の発生で、本アプリが完成するかどうかが大変妖しくなってきました。これさえ無ければまあ良い感じに進んでいるようには思うのですけどね。進展が遅いけど..
以上
参考:海戦関連のアプリを紹介しておきます。
戦艦決闘空間:何といっても第一人気です。
潜水艦決闘空間:最新アップデートでかなり好評価されています
空母決闘空間1942:かなり良くできていると評価を頂いています