2016年5月29日日曜日

【Unity】RTS:ユニットを増やす


 軽戦車・中戦車・重戦車・指揮車・歩兵を追加してユニットの数を増やし始めた。


ユニットや武器、砲弾の設定の大部分は外部XMLファイルで設定するようにした。これらを読み込み、反映させ、必要に応じてユニットを生産できるように新たにユニットパーツ工場とユニット組立工場を作った。これらの工場は初期化時にユニットの雛形を作っておき、発注があり次第ユニットを生産できる仕組みになっている。

2016年5月19日木曜日

【Unity】スペック値の操作


 ユニットのスペック値(防御力やスピード)を一時的にブースト(増大させたり減少させる)のは結構めんどうだ。一定時間内だけブーストがある場合はその時間が過ぎたら加減算された分だけもとに戻さないといけない。複数のブーストがかかっている場合は他のブーストに影響を与えないように気をつける必要がある。また時間だけでなく他の要素でブーストが無効になる場合もある。例えば集団でユニットが移動する場合、一番遅いユニットの速度に合わせるようにユニットすべての速度にブーストがかかるが、そのユニットが移動集団から離脱した場合は本来の速度に戻るためにブーストは無効にされなければならない。

 いろいろ考えた結果、ブーストチケットを発行することにした。このチケットはブーストの内容と有効時間、チケットIDを含み、あるクラスで集中管理される。有効時間が過ぎるとチケットは破棄される。一方そのブーストが適用されるユニットにはチケットIDが与えられる。ユニットは毎時間ごとに自身のもつチケットIDに該当するチケットがないか問い合わせて該当するチケットがあればそのブーストを適用する。また予めチケットIDを破棄する条件を決めておいてその条件が満たされるとチケットIDは破棄される(例えば新しい移動地点が設定された場合など)。

 延々とAIの開発を続けてきたが、一段落ついたので今後は別の種類のユニットを追加して改良を加えてみる。

2016年5月6日金曜日

【Unity】RTS:指揮権の分割


 プロジェクトは着実に、のろのろと進んでいる。前回書いたように指揮官AIの権限の一部を新たに数個のユニットを指揮するチームAIに移すことが出来た。この結果指揮官AIはどのチームを何処に移動させるかという点にのみ集中できるようになった。不完全ながら複数のユニットを横隊を組ませて展開できる機能を追加したので、チームAIはそれを利用してユニットに移動命令を出せるようになった。さらにバグっていたユニットが他のユニットを回避する機能を修正してうまく動くようになった。上の写真ではうまい具合にレッド軍が敵を半包囲攻撃することに成功している。


また指揮官AIの権限を変更できるようにしたことで軍の指揮権を指揮官AIからプレイヤーに、プレーヤーからAIに委譲することが容易になった。これは将来役立つだろう。AIはあくまで戦線に応じてチームを動かすので、あるチームが窮地に陥ったときに他のチームに救助を命じること出来ない。また今のところ同種のユニットしか使っていないので様々なユニットを使った場合の挙動が気にかかる。その辺りを退治してくことになるだろう。