2017年9月16日土曜日

【Unity】RTSゲーム Bwars2 クラス再編成

戦術AIがユニットの配置とセクターの制御点の占領ができるようになった。これで(一応)ゲームが可能になった。そこでこの機会に現状のクラスを再編成しゲーム運営部分とAIの完全な分離を目指し始めた。クラスは名前空間Game, Agent, AIのいずれかに所属するようになる。Gameはユニットの移動や攻撃の命中判定などゲーム全般の運営を行う。AgentはGame空間からユニットの位置などAIの判断に必要な情報を吸い出してAI空間に渡す。AIは受け取った情報を元に決定を下し、Agent空間に決定事項を伝達する。Agentはその内容をGame空間に命令する。GameとAIの間にAgentをかませるのは将来的にAIは外部アプリケーションに任せてBwarsから完全に独立させようとしているからだ。こうすることで誰でも彼でもAIのカスタマイズが可能になる。この再編成は最高に面倒な作業だ。

2017年9月5日火曜日

【Unity】RTSゲーム Bwars2 戦術AIの実装


 前回各セクターにユニットが配られるようになったのでセクターごとに与えられたユニットに指示を出す戦術AIの実装を始めた。戦術AIは与えられたユニットを効果的に利用し戦闘を有利に進めなければならない。戦術AIの仕事は究極的には1つしかない―ユニットに任意の場所への移動命令を出すことだ。そのためおおまかに2つの演算を行う。1つ目は敵ユニットの位置の予測で、2つ目はその位置に対する効果的な味方の配置場所を計算することだ。1つ目については隣り合うセクターの支配権や実際に確認されている敵に応じて候補地(理想的にはセクター全域が対象となるが演算コストの理由から相当間引いている)にスコアを与えスコアの高い順から敵予想値位置とする。2つ目は味方ユニットの現在位置と移動速度、敵味方の攻撃範囲の内外などの要素から同じくスコアにより移動先位置を決定する。上の写真では敵の予想位置に球体が置かれている。決して現状精度が高いものではない。しかしプロセスは正しいと感じている。ゲームの他の部分との開発と二人三脚でAIもよりましなものに変わっていくだろう。