
レッスン 4.4 - for ループを使って敵の集団を出現させる
Tutorial
Beginner
+0XP
50 mins
(130)
Unity Technologies

概要:
ゲームは非常にいい感じに仕上がってきています。プレイヤーは転がって移動し、カメラはその動きに従って回転します。プレイヤーを超強化するパワーアップの仕組みも入りましたし、プレイヤーをどこまでも追いかける敵キャラも出てくるようになりました。このレッスンでは、これらの要素をまとめていきます。
まず、敵のスポーンマネージャーを強化して、複数の敵をスポーンし、敵の集団を倒すたびに敵の数を増やせるようにします。また、敵の集団をやっつけるごとにパワーアップアイテムを出現させて、増え続ける敵の大群に反撃するチャンスができるようにします。
プロジェクトの成果物:
敵の集団をやっつけるたびに、スポーンマネージャーが複数の敵と新しいパワーアップアイテムを出現させるようにします。敵を全滅させるたびに新しい敵の集団がやってきて、敵の数も増えていきます。
1. 導入
2. for ループを書いて敵を 3 体出現させる
複数の敵を出現させてプレイヤーに向かってくるようにします。そのために、敵のインスタンス化をループで繰り返します。
- SpawnManager.cs の Start() で、単一のインスタンス化を 3 人の敵をスポーンする for ループ に置き換えます。
- for ループを新しく作った void SpawnEnemyWave() 関数に移動し、Start() からその関数を呼び出します。
3. for ループにパラメータを与える
現在、SpawnEnemyWave で 3 体の敵が出現するようになりましたが、ゲームプレイ中に出現する敵の数を動的に増やすつもりなら、このメソッドに情報を渡せるようにする必要があります。
- SpawnEnemyWave 関数に int enemiesToSpawn パラメーターを追加します。
- i < __ を i < enemiesToSpawn に置き換えてください。
- この新しい変数を Start() での SpawnEnemyWave(___) の関数呼び出しに追加します。
4. 落ちていった敵を消去する
敵をすべて退治してしまうと、プレイヤーは少し寂しい思いをすることになります。落ちていった敵は消去し、最後の敵まで消去したら新たな敵の集団を発生させるようにしましょう。
- Enemy.cs で、敵の位置の Y 軸の値が一定の負の値よりも小さい場合に敵を消去する。
- SpawnManager.cs で、新しく public int enemyCount 変数を宣言する。
- Update() で enemyCount = FindObjectsOfType<Enemy>().Length; を設定する。
- もし enemyCount == 0 ならば、SpawnEnemyWave を呼び出す if 文を書く。Start() からは SpawnEnemyWave を削除する。
5. 敵の集団を出現させるたびに enemyCount を増やす
現在、出現する敵の数を操作できるようになっています。敵の集団が出現するたびに、敵の数が増えるようにしてみましょう。
- 新しく public int waveNumber = 1; を宣言し、SpawnEnemyWave(waveNumber); と実装します。
- 敵が残っていないかをテストする if 文で、waveCount を 1 ずつ増加させます。
6. 敵の新しい集団が現れたらパワーアップアイテムを出現させる
ゲームはほぼ完成していますが、何かが欠けています。敵は何度も集団で出現し続けるのですが、パワーアップアイテムを一度使用するとずっと出てこないようになっており、プレイヤーは無防備な状態にされてしまいます。プレイヤーに反撃のチャンスがあるように、敵の集団が出現するごとにランダムな位置にパワーアップアイテムを出現させる必要があります。
- SpawnManager.cs で、新しく public GameObject powerupPrefab 変数を宣言し、インスペクターでプレハブを割り当て、シーンから削除します。
- Start() で、新しい Powerup のインスタンスを作成します。
- SpawnEnemyWave() を呼び出す前に、新しい Powerup のインスタンスを作成します。
7. レッスンのまとめ
新しい機能:
- 敵が集団で出現する
- 敵の集団を全滅させるごとに出現する敵の数が増える
- 敵の集団が出現するごとに新しいパワーアップアイテムが出現する
新しい概念とスキル:
- forループ
- インクリメント(「++」)演算子
- パラメーターを使用したカスタムメソッド
- FindObjectsOfType
次のレッスン:
- 時間を管理するためのIEnumeratorとCoroutine
- 物理的なエフェクトを追加するための物理マテリアル
- カメラの制御
- ベクトルの計算で動きの方向を定める