2012年10月26日金曜日

【Unity】RTS:障害物回避2

ハブられる一人(´・ω・`)

何故前回と同じような記事を投稿するのかと思うだろう。gifアニメを試してみたかっただけである。前回の障害物回避スクリプトを改良し後退中でも回避が可能になった。

これだけだと今回の記事はこれでおしまいになってしまうので―というのも他に前進したところがないので―スクリプトの仕組みを簡単に説明しよう。さてユニットはレンジ:SearchRangeの範囲でPhysics.OverlapSphereを使って周囲をスキャンしcolliderを見つけると障害物かどうか判定する(障害物にはタグが付いている)。
こんな図を作っているほど暇ではないのだが…

障害物は更に方角に応じL(left)、FL(FrontLeft)などと分類される。最寄りの障害物がDodge Rangeに入るとユニットは回避行動に入る。FLエリアの障害物が最寄りの場合通常ユニットは右にスライドするが、Rエリアでも障害物が観測される場合は左にスライドする。Lでも観測されたら?ユニットは停止する(世の中は厳しいのだ!)。時々ユニット同士がニアミスする事故が起きる。その時のためにDodge Range内に更に赤色のエリアを確保しここに障害物が入ると問答無用で回避(後退も含む)を行う。

2012年10月21日日曜日

【Unity】RTS:障害物回避

世の中の平和を乱すキューブへの攻撃命令を受けた3人の勇者は目標に直行する

遅れた到着した2人は先にキューブへの攻撃を開始した1人を避けて左右に移動し…

タコ殴り!

開発した障害回避システムは稚拙な作りで、前方を4ゾーンに分けてスキャンして各ゾーンの障害物の有無を調査して左右どちらに回避するか決定する。ハマって動けなくなった場合は停止する。

2012年10月18日木曜日

【Unity】RTS:攻撃と移動

白兵ユニットの攻撃について以下のように分類した。
指定攻撃はマウスで敵ユニットをクリックすると選択した味方ユニットが移動を開始し、攻撃範囲に敵を収めると攻撃を開始する。
自動攻撃はプレーヤーの操作を必要としないパッシブな攻撃で続く3種類に分けられる。
「反撃」は敵の近接先制攻撃を受けた後に攻撃を開始する。「遭遇」は敵が正面にいてかつ至近の場合にこちらから接近し攻撃を開始する。正面に敵がいるのにユニットが棒立ちしているのは不自然なため。「防御」は遭遇と同じ条件だが敵に接近しようとせず、敵が攻撃範囲に入った場合のみ攻撃する。特にこちらが後退しながら追いすがる敵を攻撃する場面を想定したもの。
「反撃」は全方位からの攻撃に反応するが、ユニットがプレーヤーの命令を受けて移動中の場合は働かない(一方的に攻撃を受ける)。ただし正面からの攻撃は「遭遇」扱いとなり移動中でも移動命令を破棄し敵との戦闘を開始する。問題は発動条件が全く同じ「遭遇」と「防御」の使い分けだが、これは移動目的地が敵より向こう側の場合「遭遇」とし、敵と反対方向の場合は「防御」扱いになるようにした。
移動目的地の方位を分析し「遭遇(Encounter)」「防御(Defence)」を使い分ける

2012年10月15日月曜日

【Unity】RTS:ダメージ計算の実装

正面からの攻撃ではキューブに与えるダメージは10(右下)であるが…

斜め後ろからの攻撃だと18と2倍近くになる
攻撃側から防御側にメッセージを送りダメージ計算をできるようにした。
攻撃側は攻撃を開始すると「攻撃側の名称」「攻撃のタイプ」「攻撃力」を送信する。防御側はメッセージを受け取ると名称から攻撃側の位置を割り出し、攻撃を受けている角度を算出、攻撃力を角度その他適当なパラメータで調整し自身のHPから減じていく。上の画像では装甲兵は標準で10の攻撃力を待つが、標的の側面攻撃では+50%のボーナスを背面攻撃では+100%のボーナスを得る。

2012年10月6日土曜日

【Unity】RTS:攻撃行動の追加

1年以上触っていなかったUnityを再開。開発が止まっていたRTS型のゲームをいじって攻撃指示ができるようにした。

執拗に箱を攻撃する剣士たち!ポーズだけだが

ユニットを選択した後地面をクリックするとその地点に移動を開始するが、敵ユニットをクリックすると対象に突撃し攻撃範囲に収めると攻撃を開始する。現時点ではポーズだけでなんのダメージを与えることも出来ない。
本ゲームはRTSなのでダメージ計算は当たり判定ではなく敵味方のスクリプト間の通信で行う。AがBを攻撃した場合、AからメッセージがBに送られる。Bはメッセージを受け取ると自らのヒットポイントを減じる。またAの位置を特定し側面攻撃や背面攻撃の場合は追加のダメージを自身に与える。
今後はモデルを作り直し足と胴体を独立させて動かし、走りながら攻撃が出来るようにする。