ミサイルを追加

前回、敵(タレット)を作成したので、攻撃のバリエーションを増やす為にもミサイルを追加します。

ミサイルスクリプトでは以下の処理をする。
・移動処理(目標に一定角速度以下で回転しながら巡行)
・衝突を検知したら削除★
・有効時間経過で失速し落下★
・ダメージ等必要な情報を渡したり渡されたり★

★の部分は以前作成した弾丸スクリプトと同じなので、
継承を使いたいと思います。
親クラスとしてShotクラス、
その子クラスにBulletクラス、Missileクラスといった感じに作成します。

以下のようになりました。

以下のようにミサイルタレットを作成できました。

 

敵ユニットを作成

そろそろ敵ユニット(タレット)を作成し、プレイヤーを攻撃させてみようと思う。
攻撃によるダメージ判定処理は過去記事の通り実装済み
弾でダメージを与える
この処理をプレイヤーにも追加すればお互い攻撃でHPが減るようになる。

なので今回は
・タレットの動作制御(砲塔回転,射撃命令)
・タレットの射撃処理(弾丸の発射)
のスクリプトを作成する。

タレットの動作制御
タレットの動作制御として以下を実現する。
・目標角度まで一定速度以下で旋回を行う。
・目標角度はプレイヤーの偏差射撃位置とする。
・プレイヤーが一定角度以内かつ射程距離内に入った場合は射撃命令(武器クラスに)。

一定速度以下で目標角度まで旋回する処理はVector3.RotateTowards関数を用いて実現した。詳細は以下。
http://tama-lab.net/2017/06/unityでオブジェクトを回転させる方法まとめ

タレットの射撃処理
タレットの射撃処理として以下を実現する。
・射撃命令により弾丸の発射。
・発射後、次弾発射までクールタイムを設ける。
・タレットの動作制御に必要な射撃情報を渡す。
過去に実装したプレイヤー用の武器スクリプトを流用しながら作成。

あとはプレイヤーとロックオン対象のHPをUIに追加するなど細々とした部分を作成しました。
そんで以下のようになりました。

以上です。

アーマードコアっぽいカメラの実装

カメラが自プレイヤーを遅れておっかけてくれるようにしました。
主に参考、というより以下のサイトのコードをそのまま持ってきました。
【Unity5】AC4系のようなカメラワークを再現する – N煎ログブログ

こちらの記事のコードをSubカメラを撤廃してそのまま実装しました。
ただそのままでは移動の際にカメラがカクついてしまっていて自分のプロジェクト用に修正が必要な部分もありました。

カメラのカクつきは以下のサイトが参考になりました。
FixedUpdateとUpdateごちゃまぜでTransformをいじるとカクつく – 考え中

プレイヤー移動の更新間隔、カメラ移動の更新間隔、ディスプレイの更新間隔をうまいことあわせないとカクつきが発生してしまうようでした。
全てUpdateにしてしまうと物理演算の処理間隔がカメラ移動の更新間隔やディスプレイの更新間隔と合わなくてカクつきが発生してしまうようです。
そこで更新間隔を固定値にするFixedUpdateを利用すると良いみたいです。このFixedUpdateをディスプレイの更新間隔とだいたい一緒にしてあげればうまいこといくみたい?

そんでこんな感じになりました

このまんまだと上下を向いたときにプレイヤーが全然見えなくなってしまうのでカメラの目標地点をプレイヤーの向いている角度によって変える必要がでてくる。
また、プレイヤーを常に中心とするのを目標とするのではなく、X軸方向の目標値には多少の余裕を持たせたい。(プレイヤーを真ん中ではなく右よりとか左よりのまんまにしたり)

CameraPositionTargetオブジェクトに以下のコードをアタッチして対応しました。

値の調整とかがまだできるようにしてないから稚拙なコードだけど・・・
こんな感じになりました。

旋回速度とかも考慮して細かい値はまだ要調整

以上です。

ロックオン対象のList管理と偏差射撃の実装

ペルソナ5をやっていて開発が滞っていた。

前回ロックオン機能を実装したが、敵が複数であった場合を想定しているロジックではなかった。
なので今回は複数の敵をロックオンできるようにかえていく。
具体的にはロックオンサークル内に入った敵をListに追加していき、管理する。
そして敵を撃破したり、サークル外に行った場合はListから削除する。
このList内に一定時間以上存在していたオブジェクトがロックオンされたものとして判定する。
また、ロックオンマーカー等の情報もこのListで一括管理する。
なので自作の構造体を作成し、Listのクラスはこの構造体を使用する。

偏差射撃については
以下を参考に作成
http://redhu.hatenablog.com/entry/2015/04/05/000305

一か月前の作業内容なのでまとめかたがかなり雑ですが以上です。