はじめに
ここでは、[Unity2Dゲームのチュートリアル](Unity - Tutorial - 2D Shooting Game) (以下、本家)にあるShooting Gameを更に発展するため方法を書いていきます。
プロジェクトのダウンロード
この講座には、本家、ゲーム制作編第12回までを作り終えたことが前提です。そこでまず、リンク先の最後にあるUnityプロジェクトをダウンロードしてください。
敵がだんだんと強くなっていくには
Unityのチュートリアルでは、InspectorからEmitterで表示する敵群(Wave)がループしたら、はじめの敵から同じように登場します。
しかしそれだけでは面白くないので、敵群が一巡したごとに敵のHPを倍増する処理を入れてみます。そうすることでクリアの難易度が変わってくることでゲームの面白さがアップすると思ったからです。
コードに記述を追加する
Emitter.csを変更します。変更箇所は主に以下の箇所です。
- 敵群のループ回数をemitterCountを導入します。
- Waveが生成されたら、Waveの子オブジェクトであるEnemyを取得し、HPを倍増させる処理を追加します。
- Wavesが0になったら、emitterCountを1増加させます。
using UnityEngine;
using System.Collections;
public class Emitter : MonoBehaviour
{
// Waveプレハブを格納する
public GameObject[] waves;
// 現在のWave
private int currentWave;
// Managerコンポーネント
private Manager manager;
// 敵の出現ループの回数
private int emitterCount = 0;
IEnumerator Start ()
{
// Waveが存在しなければコルーチンを終了する
if (waves.Length == 0) {
yield break;
}
// Managerコンポーネントをシーン内から探して取得する
manager = FindObjectOfType<Manager>();
while (true) {
// タイトル表示中は待機
while(manager.IsPlaying() == false) {
yield return new WaitForEndOfFrame ();
}
// Waveを作成する
GameObject g = (GameObject)Instantiate (waves [currentWave], transform.position, Quaternion.identity);
// Waveの子要素を取り出す
foreach (Transform child in g.transform)
{
// 体力を敵群が一巡するごとにHPを倍増させる
Enemy enemy = child.GetComponent<Enemy> ();
if (enemy != null) {
enemy.hp *= emitterCount + 1;
}
}
// WaveをEmitterの子要素にする
g.transform.parent = transform;
// Waveの子要素のEnemyが全て削除されるまで待機する
while (g.transform.childCount != 0) {
yield return new WaitForEndOfFrame ();
}
// Waveの削除
Destroy (g);
// 格納されているWaveを全て実行したらcurrentWaveを0にする(最初から -> ループ)
if (waves.Length <= ++currentWave) {
currentWave = 0;
emitterCount++;
}
}
}
}
実行
実行して、敵がだんだんと強くなっていくことを確認してください。
(一時停止して、EnemyのHPの値をInspectorから確認するとわかりやすい)
最後に
この拡張をつかってアプリを作成してみました。一度触ってみてください。
Space Shooter Classic - Google Play
私Hiroyuki7が独自に作成しているので、Unityの販売元であるUnity Technologiesとはなんの関係のありません。