2012年11月30日金曜日

【Unity】RTS:AI 2 概念図



AIを考える上でこの記事この記事は役に立った。試しにAIの役割について簡単なチャートを描いてみた。AIは上級から下級にかけて「師団」「旅団」「大隊」としている。ユニットに搭載されているスクリプトは大隊クラスだ。最終的にはには第二次大戦のRTSを目指しているのでこのような構成にしてみた。ただし今回は戦国時代が舞台なので大規模な部隊運営は想定しておらず師団AIと旅団AIはほとんど融合することになる。図を見ると簡単に見えるが実際には戦況の把握・分析、戦術の決定をこなせばならず更に時間軸が関わってくるのでAIの組み立てには相当苦労するだろう。

2012年11月29日木曜日

【Unity】RTS:AI 1 単純な移動

AIが指定した座標(赤いボール)に向けて移動する敵歩兵隊(右奥)。手前は味方
AIの開発を始めた。まずAIが特定の地点にユニットを移動させるようにした。これはプレーヤーがマウスクリックで座標を指定してユニットを移動させていたプロセスから、マウスクリックを省いただけの代物である…

2012年11月25日日曜日

【Unity】RTS:遠隔攻撃の付与

矢を目標に放っているところ
大部隊構想はもろくも敗れた。演算に負荷がかかりすぎるのだ。しかたがない。
ユニットが矢を放てるようになった。これでユニットのスクリプト開発はひと通り完了したことになる。これまでの開発でユニットは以下の様なことが可能になった。
  • 指定された座標への移動
  • 障害物を回避する
  • 近接、間接攻撃
  • ダメージ計算
これであとはAIを実装すればゲームとして機能するようになる。尤もそのAIが一番の関門なのだが。

さて、とにかくもここまで来ればどんなゲームを目指して開発をしているのか表明することもあながち場違いではないと思う。

ゲームのコンセプトアート
ゲームを作る上で最終的に目指しているのは第2次大戦モノのRTSだが、その前段階として戦国時代の合戦のRTSを作る予定だ。シングルプレーでAIと対戦する。足軽や鉄砲隊が登場するだろう。で、女の子でもおじさんでもいいんだがここぞと云う時にスパロボの様にカットシーンが入る(「撃て!」とか「全面攻勢に移る」みたいな)。

来年度中に完成すれば万々歳だろう。

【Unity】RTS:集団行動

戦闘隊形を組んで模擬目標を攻撃する歩兵隊(100人)

いくつかの進展があった。一つは歩兵がチャチなクロスボウを装備したことでこれで遠隔攻撃の実験が出来るようになった。歩兵自体に関してもっとも大きな変更点は下半身と上半身が分離したことだ。これによって歩きながら攻撃することが出来るようになった。


ユニットは隊列を組むようになった。隊が回頭しているときも見事に陣形を保っているのに驚くかもしれない。何のことはない、かれらは共通のペアレントオブジェクトの下で行動しているのだから。この勇ましい軍隊は実はハリボテである。全ての戦闘は部隊間のスクリプトでやり取りされる。個々の兵士は戦場に華を添えているだけである。

2012年11月21日水曜日

【Unity】RTS:障害物回避6

もう、壁なんて怖くない

回避システムと組み合わせると脂っこい豚とレスリングするような面倒くささになるウェイポイントシステムは自動制御に置き換えてしまった。
ユニットは辛抱強さを学んだ。進路上に味方ユニットがいると彼が退くまで待機状態となる。お陰で狭路でもユニットは混乱することなく整然と行進できるようになった。

2012年11月18日日曜日

【Unity】RTS:障害物回避5


ウェイポイントシステムを構築した。まあこれは簡単だった。配列に座標を格納して指定した順にユニットは移動することが出来る。
さて、ユニットに搭載していた場当たり的な回避システムにはかねてより問題があった。大きい障害物は回避不能であり、広大な山岳を避けたり川にかけた橋などを通過させるためにはより改良された回避システムが必須だった。最初は超長距離センサーを搭載して回避を図ったがこれはこれまでの場当たり的な回避システムを単に大型化しただけで役には立たなかった。そこで大きな障害物の周りに4つのビーコンを置くことを思いついた。上の画像で光っているのがビーコンだ。大きな障害物はユニットが近づいてくると、ビーコンを作動させる。各ビーコンはただちにユニットとユニットの目的地そしてビーコン間の距離を測定しユニットがどのビーコンを中継して進めば大きな障害物にぶつかることなく、目的地に到達できるかを特定する。ユニットはビーコンの助言に基づき先のウェイポイントシステムを利用して新たにウェイポイントを設定し目的地まで無事にたどり着く…筈だがこれは回避システムの複雑化を招くこととなった。時々ユニットが明後日の方向に向かってしまう。非常に厄介だ。

【Unity】RTS:障害物回避4

障害物をかわして移動する
ユニットに2種類のセンサーを搭載して障害物を回避して進むようにした。
センサーの一つは全周囲を監視し障害物の状況を調べる(探知した障害物には赤い線が照射される)。もう一つのセンサーは前方監視用で進路上の障害物を探知する(黄色い線)。前方監視センサーが障害物を見つけると進行方向(白い線)に対し最小の変更角で回避できる方角(青い線)を算定しその方向に移動する。
とても場当たり的なシステムでユニットは袋小路では引っかかるし、最短の経路を行くわけでもないが、ゲームの必要を満たすには充分である…

2012年11月10日土曜日

【Unity】RTS:障害物回避3


色々考えたのだけども、障害物回避にはrayで周囲をスキャンして障害物を探知するのが良かろうという結論になった。そこで個々のユニットにくるくる自身が回転しながらrayを照射するオブジェクトを搭載させた。照射が障害物に当たると赤い線が表示される。馬鹿馬鹿しいことにこれを作るのに4時間もかかった。

2012年11月9日金曜日

【Unity】RTS:移動経路の表示


出発点から目的地までラインが引かれるようにした。ただそれだけ。ところで前回大仰に語った障害回避システムには問題があるようだ。何か解決策を考えないといけない。