Unity公式チュートリアルSurvival Shooter WITH PK Chapter.15「特殊な敵を実装する」

15.特殊な敵を実装する

前回の記事で書いたように、今回のゲームでは敵と武器とは対になります。

(断続的に登場するオーソドックスな敵)

これはすでに実装しているZonbunnyちゃんで良いでしょう。

(一斉に大量登場するが、HPが低い敵)

Zonbearちゃんのパラメータを調整すれば実現できそうです。

(盾orバリアを持っておりかつ、ダメージを食らわないでいると盾の耐久が回復する敵)

実装が必要ですね。今回はHellephantちゃんをこのシールド持ちにしましょう。

そうしてできた完成図がコチラ。

実装の段取りはこのようになります。

  • Unity上でShieldとなるObjectを用意する
  • Shieldに射撃RayがぶつかったらShieldのHPを減らす
  • ShieldのHPがゼロになったらShieldを破壊する
  • Shieldがダメージを受けずに一定時間経過したら、ShieldのHPを回復させる
  • スナイパーライフルで射撃した時はShieldと本体の両方にダメージを与える
  • Shieldにダメージが入った時、シールドの色を変えたり、大きさを小さくしたり、ヒットのエフェクトを表示する

Unity上でShieldとなるObjectを用意する

Hellephantの子Objectとして、3D Object -> cubeを作成し、ShpereColliderをアタッチします。シールドに衝突判定は設けないため、isTriggerにチェックを入れておきます。また、LayerをShootableにしておくことをお忘れなく。後の工程でこれに気づかず、2時間くらいハマりました。

Shieldの色を半透明にしたいため、専用のMaterialを用意します。Projectビューで右クリック -> Materialを作成し、Albedoから半透明の赤に調整し、ShieldObjectのMeshRendererにあるMaterialに設定します。

設定はこんな感じ。

ShieldHealthManagerの実装

Shieldの管理を行うクラスとしてShieldHealthManagerを用意します。もちろんShieldObjectにアタッチ。
ついでに、ヒット時に大きさを変えたり、エフェクトを表示する処理も一緒に書いてしまいます。色を変える処理はUpdateメソッドもいじる必要があるので事項で説明します。

Shieldにダメージを与える & その際に大きさを変えたりエフェクトを表示する

まずは基本の部分として、TakeShieldDamage()メソッドを実装します。

EnemyHealthクラスのTakeDamage()メソッドをひな型に、変数の名前を書いたりShieldだけの処理を入れたりしてます。
次に、このメソッドの実行元として、PlayerShootingクラスのShoot()メソッドを修正します。

EnemyHealthの判定を行う前にEnemyShieldの判定を差し込んでいます。
isTriggerにチェックを入れたColliderでもRayが衝突判定を返してくれるようにUnity側の設定を変更します。
Edit>ProjectSetting>PhysicsよりQuerriesHitTriggersにチェックを入れればOKです。

Shieldを回復させる & ヒット時にシールドの色を変える

一定時間Shieldへのダメージがなかったら、ShieldのHPを回復させます。これにより、スナイパーライフル以外の武器で倒すには集中砲火が必要となり、ほかの敵と合わせて出現した時のいやらしさが倍増します。

回復の処理は非常にシンプルですね。HPの値と一緒にShieldの大きさも戻してあげます。
シールドの大きさの変化率は数値を直で入れてしまってますが、本当はShieldのHPと、Colliderの大きさとの関係から計算式にすべきです。が、ややこしくなりそうなので今の段階では先送ってます。

また、ヒット時、Shieldの色にアルファ値を足してあげることで透明度を変更しています。
その直後からだんだんと色味を戻すため、Lerp関数を使っています。これはぜひ引き出しとして持っておきたい手法。

これにてShieldの実装は完了~~!!動かしてみて、攻撃を当てるたびに色が変わって小さくなること、HPがゼロになったら消滅すること、スナイパーライフルでは中身ごと攻撃できることを確認したらおしまいです。

次回はコチラ

前回はコチラ

1件のコメントがあります

コメントを残す

メニューを閉じる