2016年3月12日土曜日

【Unity】RTS:AI


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

0 件のコメント: