砲台がオレを狙う!と、イイな。

作成中のSFロボットアクションゲームです。

敵がマイキャラに砲台を向けてくる!様にしたいのです。


コレを実現するために、以下の4つのステップで作り込みます。
1.マイキャラが一定の距離に近づいた
2.敵から見たマイキャラの方向を知る
3.稼働範囲内で砲台の向きを算出する
4.砲台の向きを変える
敵によっては、ステップ1.5として、「角度的な意味でマイキャラが検知範囲に入った」かどうかの判定も居るなー。

「1.マイキャラが一定の距離に近づいた近づいた」
これは、基本。
敵とマイキャラの2点の座標から距離を算出し判定。

「2.敵から見たマイキャラの方向を知る」
先ほどの2つのターゲットが持つベクトルから向きベクトルを計算するだけ。

「3.稼働範囲内で砲台の向きを算出する」
ココでつまづいた!
XYZの三軸に最大角と最少角を設定し、この範囲を超えない様に角度を算出させたのだが・・・砲台の向きが何かおかしい。
特定の向きを向いている敵の砲台はバッチリ制御できてる!が、別の向きを向いている敵の砲台の動きがヘンだ。
たぶん、砲台の稼働範囲がワールド座標として計算されているらしい事が原因ぽい。

さて、どうするか。ローカル座標で範囲制限した砲台の向きを算出し最後にワールド座標に変換するか、砲台の稼働範囲をワールド座標に変換して残りの計算も全てワールド座標で処理するか・・・手数が少ない方にしたい。

で、結局は、
・ワールド座標で砲台からマイキャラへの方向を算出
・砲台座標から土台の方向を減算(→砲台のローカル方向になる)
・減算後の砲台方向(ローカル座標)に対して回転軸の制限を実施
・回転軸制限後の方向に土台の方向を加算・・・完了
て感じにした。ローカル座標→ワールド座標の関数(Transform.InverseTransformDirectionなど)があるが、なんだか上手くいかなかったので上記の方法で実装。

「4.砲台の向きを変える」
も、つまづいた!!とんだ、つまづき祭りだ。
正直ラクショーとか思っていたが、まだまだだな。

コッチの課題は2つだった。

1.モデルのアニメーター設定
はじめ、いわゆるアニメーションはさせずボーンを直接操作するから、そんなの要らないや!ってしていた。・・・ソレでは動かなかった。そこで、generic設定でAvatorを生成しとプレハブに設定。したら、動かせた。ヨシ。

2.砲台のボーン向き
コッチは最初、砲台が向いている方向にボーンを尖らせていた。だがコレでは、はじめから一定の向きにベクトルが回転した状態になっていて、実際の砲台の向きがマイキャラに対して常に上向きになっていた。モデルにボーン埋め込み直しでクリア。

そんなこんなで、ひとまずオッケーだ。


沢山の砲台が、オレを狙う!


コメントを残す

メールアドレスが公開されることはありません。