2013年7月28日日曜日

【Unity】RTS:AI12 状況を把握する

各部隊がどのポイント周辺に集結しているか確認する。

前回、各部隊は特定の戦域の特定のポイントに移動することが可能になった。次にAIは現在どの部隊がどこにいるのか把握できなければならない。というのもある戦域に戦力を投入する場合、近隣の戦域にいる部隊を動員しなければならないからだ。部隊はふらふら半自律的に移動するので、移動命令の履歴を参照することはあまりあてにならない(トラブルがあって部隊が目的地に到着してない場合もある)。そこでまず各戦域が戦域内の全部隊を特定しAIに報告する。AIは報告を元に各部隊と戦域内のポイントとの距離を測定し部隊がどの戦域のどのポイントに一番近いか記録を行う。あとは作戦AIが命令を下すときに記録を参照して最適な人選を行う。

2013年7月27日土曜日

【Unity】RTS:AI 11 戦域

指定された戦域に集結した部隊

さて、これまで散々考えてきた小難しいAIの話は忘れよう、というか思い出せない(戦力投射…なんじゃそりゃ)。兎にも角にも指定した場所に部隊を移動させなければ戦争もできない。そこで戦場を碁盤で区切り、複数個の戦域(Theater)に指定することにした。更に1つの戦域に数にして9つ(てきとう)のポイントを設けた。


あとは部隊にTheater2、ポイント3に移動せよと命令すれば目的地に移動する。素晴らしい。戦域が増えた時にポイントのアドレスを格納するのにリソースを浪費しなければよいのだが(ポイントには地形情報などの重みも記録するため)。

2013年7月7日日曜日

今後の予定

休みは終わりを告げて
たんぶらにかまけて半年以上ブログを放置していた。気づけば今年も折り返し地点を超えて、残り半分。ひたすら絵を描き続けていたので特にこれまでの過ごし方に後悔はない。しかし一方でゲームの開発は止まり今後の展開には暗雲が立ち込めていてどうなるのか予想しがたい。

 仕事はやめることにした。週6の12時間勤務など人を馬鹿にしている。絵など趣味に時間を取れないのでやめることにした。次は決まっていないし見つかるかもわからない。どうせろくな仕事じゃないだろう。ともかくも自分の時間が取れることが必須条件となる。

貯金と相談したところ何もしなくても8ヶ月生活可能とわかった。今年は大丈夫だということだ。まあ見つけた仕事でつないで20代を生ききれれば良い。30以上生きようとは今のところ思ってない。

ゲームの開発を強力に押し進めるつもりだ。AIの設計が一番の難関だが必ずできると考えている。こども騙しくらいのものは作れるだろう。

絵は1年前よりうまくなった部分がある。逆に何か失われたものもあるようだ。実際のところそのへんの気が利く高校生のほうがよっぽどうまい。しかしここは「けど」の精神で行こうと思う。「下手だけど、描く」。論理的には非合理的だが、論理を突き詰めると人は生きる意味がなくなってしまうので、論理だけで決定するのは危険だと感じている。頭でなく体の声に耳を傾けるべきだ。ゲーム開発にも力を注ぎつつ、絵も上達をはかるつもりだ。

2012年12月31日月曜日

2012年の終わり


とうとう、2012年が終わろうとしています。私にとって2012年はCGに注力した年でした。それまでは思い出したかのようにぽつぽつとCGを描くことはありましたが絵についてはもっぱら透明水彩に時間の大部分を割いていました。しかし今年はかなりの労力をCGに投入したのです…

アーカイブによると今年は158枚描いたようです(まあ、ぼつになって日の目をみなかったものもありますが)。とくに四月から六月にかけては1日1枚のペースで描いていました。このときは鉛筆で描いた線をそのまま線画として使ってSAIで塗っていました。これは大変時間を節約できる手法でした。その後ラインレスの絵を目指して塗りによる表現重視に移行していきました。線画に頼りすぎると表現が硬くなる気がします。たとえば髪を描く際は線画よりも筆で一発で塗った方がより自然な流れになる気がします。ただ指などは線を使った方がいい結果が得れるでしょう。全体を通して見ると塗り方が上達しました。人体のバランスのとり方もすこしましになったようです。

ゲームの開発はそれほど力を入れる予定はありませんでしたが、結果として進展がありました。UnityでRTSゲームを開発中で、RTSで必要とされる基本的な動作―クリックによるユニット選択、移動指示、攻撃など―は実装できました。問題はAIの開発にあります。この連休でこの問題に取り組むことにしましょう。

来年は引き続きCGに多くの力を注ぐつもりです(200枚は描きたいところです)。ゲームの開発も引き続き行います。

ではみなさん良いお年を。

2012年12月13日木曜日

【Unity】RTS:AI 10 部隊の役割

RTSのAIを考える上でここの記事はすべての答を与えてくれたわけではないが大変参考になった。攻撃目標を決めた後、各部隊に任務を割り振ってどの部隊が特定の任務を一番効率よく出来るかコストを計算させよう。コストが一番低い部隊がその任務に向いている。AIは常に複数の作戦を計画しており全部隊がその作戦を実行するコストと成功した際の見返りを鑑みて作戦を決定するだろう。

そこで各部隊に割り振る任務にはどのようなものがあるか考えてみよう。
大きく分けると部隊は攻撃を実行するグループ(攻撃グループ)と攻撃部隊を支援するグループ(支援グループ)にわかれることになる。ここでこれまでの記事で触れてきた「攻撃円」だとか「危険区域」について再定義してみよう。



 各部隊は「支配地域」と「交戦責任範囲」を持つ。支配地域はボードゲームでお馴染みのZOC(Zone Of Control)であり潜在的な攻撃範囲を示す。交戦責任範囲はほとんど射程とイコールである。支援グループの圧迫と支配についての定義は以下のようにした。
圧迫:圧迫とは敵の行動の自由を奪うことである。
支配地域の対象:味方部隊に攻撃を仕掛ける可能性がある敵部隊
圧迫を受けている敵部隊は移動の際に攻撃を受けるリスクを覚悟しなければならない。しかし速度が早いのならリスクは低くなるだろう。

支配:支配とは戦場の一地点を確保することである。
支配地域の対象:敵が存在すると味方部隊が攻撃を受けてしまう地点
支配地域に侵入する敵は攻撃されるリスクを覚悟しなければならない。

AIは攻撃はもちろん、圧迫と支配を上手く使って戦場の主導権を狙うべきだ。簡単な例を考えてみよう。
青軍は左から二番めの部隊が攻撃を行う。ほかは支援グループで攻撃部隊が敵の攻撃を受けないように圧迫と支配をつかい敵を牽制している。五分の勝負には持ち込めそうだ。


2012年12月9日日曜日

【Unity】RTS:AI 9 攻撃目標の選択と部隊展開

AIは最適な攻撃目標を選択し、攻撃部隊の展開位置を算定できるようになった。下の写真は左のプレーヤーの部隊の陣形に応じて、右側のAI部隊が計画している攻撃展開位置を示している。
上の陣形ではAIはプレーヤーの右翼が脆いと判断し目標の正面と側面に部隊を展開し攻撃することを計画している

部隊を突出させるとAIは目標を切り替えた。この場合側面攻撃を実施するとプレーヤーの後衛部隊から攻撃を受ける可能性があるため正面攻撃のみを計画している
攻撃部隊以外は何をするのか、複数目標を同時攻撃するときはどうするのか、状況変化に応じ計画を修正するタイミングはいつなのか…等々課題は山積しているが今日はここで止めておくことにする。疲れたよ、俺は。


【Unity】RTS:AI 8 しゃぼん玉作戦


敵を多方面から攻撃するのは効果的だが、部隊が展開した時に敵から挟撃を受けるのは避けたい。挟撃を受ける可能性があるポジションは敵の部隊と部隊の間である。そこで敵部隊の間に円形の「危険区域」を指定する(ひとまずシャボン玉で表示)。AIは多方面攻撃を仕掛ける際に展開する地点が危険区域内にないか調査を行う…

とにかくAIの設計は複雑で難しすぎる。本当に作れるのだろうか