Unity公式チュートリアルSurvival Shooter応用Chapter.11「敵の出現をWaveで管理する」

今回からは、「こうやったらより面白くなるんじゃないかな」というポイントをいくつか挙げて、自分流にアレンジしていくよ。具体的には以下の5つを実装していこうと思う。

11.敵の出現をWaveで管理する
12.射撃にリロードを設ける
13.敵に射撃がヒットした時、ノックバックする
14.武器変更と武器強化アイテムを出現させる
15.敵の個性を強くする

それぞれを実装する理由は各記事で解説していくよ。さっそく始めよう!
[追記]コンセプトの整理を忘れていたので次回の記事で、各項目の実装理由を整理しまする。

11.敵の出現をWaveで管理する

面白いゲームプレイには、だんだん上昇していく難易度と目標が不可欠だ。現状では敵の出現は散漫かつやむことがなく、自身が力尽きるまで悪夢が終わることはない。
出現する敵の種類、数を一つのWaveとしてパッケージングし、この問題に対処しよう。

実装概要

EnemyManagerスクリプトの書き換え
* SpawnメソッドにエネミーのPrefabを引数として渡すことで、アタッチするスクリプト1つで完結させる

* 実際にはWaveのさらに細かい概念を用意(便宜上Levelと呼ぶ)、各レベルごとにメソッドSpawnWaveW_L()で、スポーンするエネミーの数、種類を指定する

* 各Waveの開始時には、Wave開始を告げるUIを表示する
* 最終Waveの最終レベルで出現するエネミーを全部倒したらクリア画面に移行する

Spawnメソッドを書き換え、出現する敵をスクリプトで指定できるようにする

ずばりこうじゃ!

これで、各GameObjectに設定したPrefabのエネミーをスポーンさせることができる。

Wave毎にメソッドを用意し出現する敵を決める

例えばWave1のLevel1で出現する敵を呼び出すメソッドはこうなる。

超シンプルですね。
では、このメソッドの実行はどこから呼び出そうか?
そのアプローチが次。

Waveクリアを判定し次のWaveへ進む

これには、EnemyManagerクラスのみならずEnemyHealthクラスにも手を加える必要がある。
ざっくり言うと「Levelの初めにスポーンした敵を倒して残りが0体になったら、次のレベルのSpawnWaveメソッドを実行する」という実装です。

ちなみに、Wave1-1はStartメソッドからInvoke関数で実行してます。

まずはEnemyManagerクラスがコチラ。
※Levelと命名すべきところもWaveと命名して実装してしまってます。
 実装時は”Wave1-1″でいいや~と思ってましたが、ブログにまとめる段になって”Wave1-1“を説明する言葉がないと不便なことに気づき急遽Levelと呼ぶことにしたためです。

そしてEnemyHealthクラスの調整がコチラ。

ここまでできれば機能の実装はほぼ終わったようなもの。
あとはWave開始を知らせるUIとクリア画面を作って表示するだけです。

Wave開始を知らせるUIのアニメ作成とその表示

チュートリアル内でゲームオーバー画面を作った時と同じ要領で、AnimationのClipを追加する。

完成形はこんな感じ

HUDCanvas下にWaveTextを追加し、見た目を整える。設定はこんな感じ。

HUDCanvasのアニメータにWaveClipを追加して、WaveTextが左から登場して右に消えていくようアニメを作る。設定はこんな感じ。

ここで一瞬詰まったのが、テキストの位置を動かすときにPosition(Z)でなくAnchoredPositionをプロパティにしなければならないということ。(下記Reddit参考)

Animation on Rect Transform I can’t see position X & Y. What is position(Z)? Can I get the X & Y position on position(Z)? from Unity3D


理由を考えるに、画面サイズが変わった時にPositionで指定していると意図しない挙動になりそうだから、とかかしら。

アニメータのNewStateからWaveClipへのTransitionを引き、Waveトリガーを作成しくっつける。

WaveClipからNewStateへ戻るTransitionも忘れずに。こちらのTransitionはHasExitTimeにチェックをつけておこう。

各Wave最初のLevelのエネミースポーンメソッドに、SetTriggerを追記したらOK!

クリア画面のアニメ作成とその表示

こちらもWave表示とやることは同じ。

クリア画面の完成形

HUDCanvas下にClearTextを追加。

設定はこう

ClearClipを作成。

Animatorを設定。

Transitionは一方通行でOK。

Levelクリア処理に、「最終Levelをクリアした時」の条件分岐を追記。ついでにスペースキーでリトライもできるようにしておく。

これで実装は終わり!次は武器の残弾とリロードをやっていくぞ!

[追記]コンセプトの整理を忘れていたので、次回はそれを挟む。実装はそのあとから。

次回はコチラ

Unity公式チュートリアルSurvival Shooter応用Chapter.11.5「コンセプトを考える」

前回はコチラ

Unity公式チュートリアルSurvival Shooter日本語実践Chapter.10

「Unity公式チュートリアルSurvival Shooter応用Chapter.11「敵の出現をWaveで管理する」」への2件のフィードバック

コメントを残す

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