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

はじめに

牛歩の如く、ワールドカップの激闘の中を、少しずつ進めているのですが、なかなか悩んでいる状況にあります。たぶん、ここで明日日本代表がポーランドを打ち破って決勝トーナメントへ進出するともう少しこの難しいTANKS!! NETWORKの探索を続けるのでしょうかね。

今日までの調査結果を少し整理しておきます。

TANKS! Networking Demoアセット解析状況

アセット本体はこれです

前回報告の方向性で進めています。とにかく戦車アプリのままなら即動作ですごいです。問題はこれを自分なりの戦艦アプリに変えられるのかということ。ほとんど挫折しそうな状況ですがまあ説明していきます。牛歩状態。

UnityのUNETでわかったこと

ユーザーが20人まではただです。50人までなら毎月数千円のUnity契約でできそうです。プロ契約だと200人までだそうです。

一方で皆UNETで最初創るけど製品は皆PHOTONへ移行するという話があったのでPHOTONを調べますが、やはり20人までは無料でそれ以降はお金がかかるように思えます。ただ、ちょっとPHOTONを覗いてみて想ったのは、自分のスキルレベルにはPHOTONの機能を入れ込むのが良いのかなと感じたことです。ただ注意すべきは、最初にシンプルに創っている場合にはUNETでもそこそこ動いていたことからすると、同じ問題にはまる危険性があります。たぶんこれかな。

自作シーンの登録ができた

前回は戦艦大和をタンクの代わりに登場させましたが、今回はシングルプレーヤー用のシーン(ネットワーク用ではないということ)で自分のシーンを創ってゲーム選択させるようにします。

アプリを起動すると、メニューパネル(MenuUI)が開いています。このシーンから各種のモードへ移行できるのですが、この状態でHierarchyを見ると下図となっています。

UIの部分はMenuUIがトップとなっていますが、この下に20個位ならぶのがメニューパネルで管理されるアプリ全体の機能と考えるのが良いと思います。

まずはシングルプレイヤーモード(ネットワークでマルチプレイヤーではないという意味)で起動して、その中で戦車を戦艦に変更し、シーンを砂漠から海に変えて行くというアプローチです。

下記Hierarchyの中にアクティブになっていない子供グループUIがあって、上から2番目のMainPanelの下がSinglePlayerPanelです。メニューでシングルプレイヤー(画面上はTRAININGとなっていますが)を選択すると目的とするシングルプレイヤーモードへ入ります。

シングルプレイヤーモード(TRAINING)へ入ってHierarchyでSinglePlayerPanelの中を見ると下図となります。このメニューの中に戦いのシーンを選ぶパネルがあります。この部分はLevel Selectという名前で、LevelSelect.csというスクリプトが付いています。

Inspector画面でLevelSelectのプロパティを見るとだいたいシングルプレイにおけるアプリの全体構成が見えてきます。自作シーンを追加するという観点で重要なのは一番上のMapListです。SinglePlayerMapListというもんが割り当てられています。

SinglePlalyerMapListというScriptableObjectsというデーターコンテナであって、シングルプレーヤー用の各レベルに対応する戦闘シーンが定義されています。格納場所はPrefabの中にありました。ここです。 Assets/Prefab/Configuration/SinglePLayerMapList.asset

Inspectorで中身を覗くと下記となります。10個のマップがありますが最初の数個のみ表示。これでかなり見通しが良くなりました。ここの追加すればシングル用のマップは使えます。

この中にSceneNameという要素がありますが、この中身はシーンネームです。調べてみるとシーンフォルダーのシングルプレイヤー向けのフォルダーの中に該当シーンがありました。

よって、最初のシーンを複製して、自分専用のシーンを創ります。このシーンを開いて、あらかじめインポートしておいた標準アセットの環境アセットの中の海面アセット(WaterProDytime)を砂漠シーンに追加します。他に山だとか岩だとか少し間引いて海になるように変更します。そしてセーブします。

SinglePlayerMapListの最初のリストのシーン名を自分で創ったシーン名に変更します。そうするとやりました。前回投入した戦艦大和が海のシーンに浮かんでいることが確認できました。

カメラ位置の制御はCameraRigというものでやっています。これを少しいじって自分なりの場所にします。またカメラモードも透視モードでなかったので変更です。少しずついじりながら様子を見て自分のテリトリを広げていく感じです。

ようやく戦艦の操作の検討を始めます。現状でもTANK(戦車)と同じ動きはするのですが、それではまるで戦艦ではありませんので操作に関する解析を行う必要があります。

CompleteTank(Clone)というものが制御対象の戦艦大和であり、これを見るとTankMovementとTankShootingというスクリプトが付いています。これが直接自分の戦艦を操作しているようです。

訳したマニュアルでちょっとしか記述されていないアーキテクチャの説明では、シングルプレイヤーでもネットワークゲームを意識した操作系の中でのシングルモードとなっているとありました。ちょっとコードを見てみるとNetworkManager関連の記載が多々存在します。

ちょっと理解は難しそうですが、今少し努力してみようかと思います。今日はこれからその作業予定です。

TANKSNETアセットのC#コード記述について

とにかくコードが多すぎる。そしてひとつひとつが高尚すぎる。なので本当に大変そうなのですが、まあ自分がいじる必要がある部分は限定されているのかなという気もします。

OpenCVアセットの超絶お洒落なソースコードはもう全く理解できなかったですが、このアセットのソースコードはまあそこそこ読めるので、自分なりにドキュメント化して、自分でいじる部分、ブラックボックス部分、インターフェース部分と明確にすれば使えるのではないでしょうか。ただ、自由自在にひとつの超特大スクリプトで書いていくという自分のスタイルは難しそうな気がします。

最後に

少しずつ牛歩で進んでいますが、まあ次はカメラワークを含めて戦艦を自分なりの様式で自在に操作するところまで早く持っていきたいものです。

それが実現できたら早めにネット対戦モードを実現してデバッグしたいです。ここまで行うとようやくこのTANKSNETアセットの自分の今後のアプリ開発におけるポテンシャルが見えてくると見ています。日本代表が勝ち続けてくれることが重要ですのでよろしくお願い致します。

以上

参考:元となる戦艦大和アプリです。