LoginSignup
1
3

More than 5 years have passed since last update.

敵がだんだんと強くなっていくようにする方法(Unity2D Shooting Game 拡張)

Last updated at Posted at 2015-03-17

はじめに

ここでは、Unity2Dゲームのチュートリアル (以下、本家)にあるShooting Gameを更に発展するため方法を書いていきます。

プロジェクトのダウンロード

この講座には、本家、ゲーム制作編第12回までを作り終えたことが前提です。そこでまず、リンク先の最後にあるUnityプロジェクトをダウンロードしてください。

ゲーム制作編 第12回 Waveを5個にする、スコアの実装

敵がだんだんと強くなっていくには

Unityのチュートリアルでは、InspectorからEmitterで表示する敵群(Wave)がループしたら、はじめの敵から同じように登場します。

unity2015-03-17_14_57_48.png

しかしそれだけでは面白くないので、敵群が一巡したごとに敵のHPを倍増する処理を入れてみます。そうすることでクリアの難易度が変わってくることでゲームの面白さがアップすると思ったからです。

コードに記述を追加する

Emitter.csを変更します。変更箇所は主に以下の箇所です。

  1. 敵群のループ回数をemitterCountを導入します。
  2. Waveが生成されたら、Waveの子オブジェクトであるEnemyを取得し、HPを倍増させる処理を追加します。
  3. 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とはなんの関係のありません。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3