2017年8月30日水曜日

【Unity】 RTS : Bwars2 ユニットをセクターに送り込む


 前回AIがセクターごとに戦力の配分を決定できるようにしたので、その戦力配分に従い管理するユニットを実際に各セクターに派遣できるようにした。セクター無担当のユニットからセクターが割り当てられていく。戦力配分は随時更新されるので戦力要求に対して過剰なユニットを抱えるセクターはユニットを「クビ」にする。クビになったユニットは別のセクターが割り当てられてそこに向かう(Bwasは優しい世界なのだ)。敵が担当セクターにいる場合は当然戦闘になる。いまのところユニットはセクターの制御点を目指すので戦術も何もないが、これでセクターの奪い合いができるようになった。上の写真は同じセクターで鉢合わせした敵味方のユニットの戦闘の様子を示している。

 上の写真を載せててアレだが、ユニットは3Dモデルでなく絵(シンボル)にしようと考えている。モデルを作るのは大変な手間で1つのモデルを作る間に同じクオリティの絵が10枚はできる。加えてモデルは戦闘時の効果の設定(例えばモデルのどの部位から砲火が生成されるかなど)やアニメーションまで含めると大変厄介だ。もちろんモデルを使用した場合の臨場感・迫力は素晴らしい。でも個人のリソースでは市販のゲームには敵いっこないのだ。また今回はmodの利用を前提にしている。Rimworldなどのmodを見て思ったのはちょいちょいと絵を描いてちょいちょいとxmlを書いてできるような手軽さが理想的と感じた。モデルを利用した場合作るのも読み込む仕組みを作るのもとても手間がかかってしまう。シンボルのデザインはまだ考えていないが多分カメラの距離の応じてシンボルや兵種の表記が変わるようになるだろう。

 現状ではセクターごとの戦力の配分しか決められないので各セクターごとに戦術AIが思考し担当セクターに与えられたユニットを効果的に使えるようにする必要がある。ここはいま仕組みを考えているところだ。話はそれるが考えを練るときにMacではOmni Outlinerを愛用していたがWindowsでは気にいるものが見つからなくて諦めていた。しかしあらためて探したところUV Outlinerという良さそうなソフトが見つかり最近利用し始めた。とても使いやすいソフトだ。


2017年8月21日月曜日

【Unity】RTS Bwars 2 : セクターごとの戦力の割当


戦場を区切るセクターごとにどの程度の戦力を割り当てたらいいか計算する仕組みを実装した。ここでの戦力とはユニットのコストのことでコストが高いユニットほど強いという前提に立っている。この戦力の割当に応じて全体を管理する戦略AIが管理下のユニットの担当セクターを決めていく。さらにセクターごとの戦術AIが割り当てられたユニットをうまくつかってなんとかする。

戦力の割当は大まかにまず当該セクターとその隣接するセクターの支配陣営を調べて安全度を算定し戦力を分配する。そのうえで更にセクターごとの彼我の現在の戦力に応じて調整を行う。この調整についてはデバッガーを作成し、テストデータを入力・保存できるようにした。特に保存は重要で似たようなテストを繰り返すのでそのたびにいちから入力していると大変な手間になる。

戦力の割当に基づくユニットの担当セクターの割り当てはデリケートな問題だがひとまず要求戦力に比して現有戦力が少ないセクターは近い無担当ユニットから割り当てられていくように今実装している。

新規まき直しからの目標である制御系と操作系の明確な分離の原則に従いAIが処理で必要な情報は直接ユニットやセクターのクラスに書き込まず、別途完全に独立したクラスで管理するようにしている。