第07回

Wave型の仕組み作り

プロジェクトの準備

  1. このページは 2Dシューティングゲーム を初心者用に説明したものです。
    ダウンロードした「第06回プロジェクト」から Assets/Scene/Stage.unity のダブルクリックで起動します。
    Script にエラーがあるらしく、このままでは動かないのでエラーを修正します。
    Assets/Script には Background.cs, Bullet.cs, DestroyArea.cs, Enemy.cs, Explosion.cs, Player.cs, Spaceship.cs が格納されています。
    これらの Script から次の箇所を修正して下さい。
    1. using に次の3行を指定して下さい。
      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
    2. .velocity を次のように修正して下さい。
      GetComponent<Rigidbody2D>().velocity
      
    3. Background.cs の次の行を修正して下さい。
      【修正前】
          renderer.sharedMaterial.SetTextureOffset ("_MainTex", offset);
      
      【修正後】
          GetComponent<Renderer>().sharedMaterial.SetTextureOffset ("_MainTex", offset);
      
    4. これまで何度も修正しているので、不明な点は今までのソースを参照して下さい。
  2. 修正が終わると、画面下の赤いエラーメッセージが消えます。
    再生ボタンをクリックすると、背景をスクロールしながら Player と Enemy から弾が発射されます。
    弾に当たると Player や Enemy が消滅します。
    矢印キーで Player を操作できることも確認して下さい。
    確認が終わるとメニューの File→Save Scene で保存して下さい。

Wave の作成

  1. メニューの GameObject/Create Empty から Wave を作成します。
    Waveの位置は(0,0,0)として、3個の Enemy を子要素にします。
    それぞれの Enemy の位置は Inspector から (0,0,0) (1,1,0) (-1,1,0) として下さい。
    このままでは Player と Enemy が重なるので Player を左に移動して下さい。(X を -3 ぐらい)
    再生ボタンで三機の Enemy が描画されることを確認して下さい。
    Wave を Assets/Prefabs にドラッグして、ヒエラルキービューの Wave を右クリックから削除します。
  2. Assets/Scripts を選択して [Projectタブ][Createタブ] から Emitter.cs を作成します。
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Emitter : MonoBehaviour
    {
        // Waveプレハブを格納する
        public GameObject[] waves;
        // 現在のWave
        private int currentWave;
    
        IEnumerator Start ()
        {
            // Waveが存在しなければコルーチンを終了する
            if (waves.Length == 0) {
                yield break;
            }
    
            while (true) {
                // Waveを作成する
                GameObject wave = (GameObject)Instantiate (waves [currentWave], transform.position, Quaternion.identity);
                // WaveをEmitterの子要素にする
                wave.transform.parent = transform;
                // Waveの子要素のEnemyが全て削除されるまで待機する
                while (wave.transform.childCount != 0) {
                    yield return new WaitForEndOfFrame ();
                }
                // Waveの削除
                Destroy (wave);
    
                // 格納されているWaveを全て実行したらcurrentWaveを0にする(最初から -> ループ)
                if (waves.Length <= ++currentWave) {
                    currentWave = 0;
                }
            }
        }
    }
    
  3. GameObject/Create Empty から Wave を発射する Emitter を作成して下さい。
    Emitter の位置は(0, 3.5, 0)にします。
    Emitter.cs を Emitter にアタッチして下さい。
    public GameObject[] waves; を宣言すると Inspector に Waves が追加されます。
    画面右の Waves にヒエラルキービューから移動した Asset/Wave をドラッグして設定します。

  4. 再生ボタンをクリックすると Wave が登場します。
    敵を倒したり通り過ぎて行くと再度 Wave が登場します。
プロジェクトの詳細は 2Dシューティングゲーム から 「第07回 Wave型の仕組み作り」を参照して下さい。
第07回 の完成したプロジェクトは、後部の「今回のプロジェクトファイルをダウンロード」からダウンロードすることが出来ます。

[Next Chapter ↓] Shooting-08
[Previous Chapter ↑] Shooting-06

前田稔の超初心者のプログラム入門
超初心者のプログラム入門(Unity)