2016年3月29日火曜日

【Unity】RTS:前線への部隊配備


 前回の両軍の影響範囲を計算するマップを使って前線を設定し、ユニットを配置することに成功した。ユニット情報が更新されると影響マップ作成され、各指揮官AIはそのマップをもとに適当な数の前線点を設定する。前線点の位置に応じて要求戦力が決められ、優先度の高い前線点から複数のユニットから構成されるチームが割り振られていく。下の写真では左からのブルー軍と右からのレッド軍がマップ中央で対峙している。ブルー軍のほうがやや戦力が優越しているので影響範囲が広い。


しばらくするとレッド軍が優勢になりブルー軍を追いやってしまった。


 戦術の決定の仕方も改め、まず指揮官AIがチームの状態を確認した上でチームごとに一番攻撃的な戦術の上限を決定して、ついで各ユニットが自身の状態に応じてチームの戦術の上限を超えない内で戦術を決定して振る舞うようになった。これで一応AIによる最低限の作戦行動が可能となった。

 現在は両軍の戦力とその位置によってのみ前線が決定しているので、今後これに地勢上の拠点による重みを加味するように改善していく。

2016年3月23日水曜日

【Unity】RTS:戦況マップ


このあたりを見ながらほそゞゝとAIが判断材料とする戦況マップを実験している。青丸と赤丸が部隊の位置で距離に応じて影響度が低下する。黒い部分は両軍の影響力が拮抗しているか、ない場所を示している。基本的に黒い戦線が遠ければ進軍する…という方法がとれそう…と考えている。

2016年3月12日土曜日

【Unity】RTS:AI


 引き続きAIを作っている。撤退したユニットが司令部近くで回復できるようにしたのでAI同士の軍勢が押し合いへし合いするようになり見ていて面白くなった。 近い目標地点には微速で移動しながら回転したり、退却時の移動を最適化。ここに来てこつこつ作っていたユティリティクラスが役に立ち始めた。例えば指定地点まで移動するのにかかる時間を返す関数は複数の移動先の選択肢から最適なものを選んだりするのに幅広く役立っている(単に距離をスピードで割っているだけだが)。他にもある地点は何時方向になるだの、何時方向にいくら移動した地点はどこだのといったことを調べる関数が役立っている。戦術的に正しい動きを実装する上でストレスなくアイディアを表現できるのは嬉しい。
 当然といえば当然だが、機能と思考を徹底的に分離して実装することが大切だと常々感じるようになった。例えばシャーシクラスはユニットの移動を担当するが、あくまで目標地点まで円滑に移動するだけの機能しかない。ユニットがダメージを負って退却するのを命令するのはユニットAIクラスだ。またシャーシクラスには近隣の味方を発見して回避する関数があるが、自身で発火させることはない。これもユニットAIクラスが適切なタイミンで発火させる。もし自動で回避するようにしていたら敵前で横っ腹を向けるような運動をしかねないからだ。このように各機能はあくまで命令を与えられた時のみ稼働して最適な方法で目標を達成することにとどめ、一つの思考をもったクラスで各機能を集中管理・使用するのが望ましい。

2016年3月8日火曜日

【Unity】RTS:AI


 Behavior Designerを使ってビヘイビアツリーによるAIの実装を始めた。AIは指揮官AIとユニットAIに分かれている。まずユニットAIでステータスのリセット、ヒットポイントや攻撃してくる敵の火力などの状況に基づいたステータスの更新を行う。次に指揮官AIでユニットAIのステータスを確認した上で戦術の基本方針―攻撃・防御・撤退―を決定する。最後にユニットAIが指揮官AIの決めた戦術に従って行動を起こす。これを1ルーチンとして定期的に実行される。今日で一応AI対AIの戦闘ができるようになった。上の写真ではブルー国とレッド国がそれぞれのAIに従って戦っている。ときどきフシギな振る舞いが観察される。

ツリーのデザインはオンラインでチャートを作成できるCacooを使って先週の金曜に設計した。指揮官AIは指揮下のユニットを幾つかのチームに分けて運用することができる予定であり、今後はチーム運用の機能を実装していく。

2016年3月3日木曜日

【Unity】RTS:AIとナビメッシュ


ユニットにナビエージェントをくっつけて障害物を避けれるようにした。また個々のユニットの処理の開始は最上位クラスの委員会で集中して取り扱うことにした。委員会は全ユニットにまず索敵から攻撃目標のタレットへの割り振りを実行させた後、AIに思考させる処理を定期的に実行する。ユニット単体では行動を実行する仕組みを持っているが発火させる者がいないのでなにも出来ない。この仕組を使うことでAIは最新の索敵データを利用できることが保証されている。
 AIは現在のところユニットに搭載され索敵の評価や退避などを行うユニットAIとユニットの集合体を指揮する指揮官AIの二つがある。AIにはビヘイビアツリーを利用する予定だ。少し変わっているのはプレーヤーの操作するユニットにもAIがあることで、これは実際にユニットを動かすことはないが、敵味方のAI同士が交信してより的確な戦術決定を下す助けになることを狙っている。これは別にプレーヤーが不利になるということではない。このゲームには戦場の霧はないし、あったとしてもその場合はAIが共有する情報に適切な制限をかければいいだけだ。