Unityで作る「シューティングゲーム」Vol.17

Unityで作る「シューティングゲーム」。
前回は「敵2」の通常の動きが完成しました。
今回の課題は次の2つ。

  1. 登場シーンの作成(シールドも含む)
  2. 出現管理

では早速作っていきましょう。

1,登場シーンの作成

「敵1」で登場時にシールドを作成したの、覚えていますか?
今回も同様な手順で「敵2」にシールドを持たせ、配置についた段階でシールドを外してやりたいと思います。

①まずは取得済みのアセット [2D Space Kit] =>[Particles] からシールドの素材を取得し、Hierarchy にドラッグ&ドロップで取り込みます。

②「Enemy2」にドラッグ&ドロップ、「Enemy2」の子要素として配置します。

Unityで作る「シューティングゲーム」Vol.17

③シールドの名前を変更しましょう。「Enemy2Shield」に変更

④ Tagに作成済みの「Enemy」をセットします

⑤ positionは子要素なので、親要素に対する相対値となります。
3軸とも 0 にしておきましょう。
大きさを 50% にします。
Scaleの x、y、それぞれ 0.5 を指定。

⑥Colorは「赤系」にしておきます。

⑦Sorting Layer を作成済みの「Enemy」にします。

Unityで作る「シューティングゲーム」Vol.17

⑧CircleCollider2D コンポーネントを追加します。
 EidtCollider で大きさをシールドの大きさに合わせます。

⑨「Is Trigger」にチェックを入れて完成。

Unityで作る「シューティングゲーム」Vol.17

続いてプログラミングを記述していきましょう。
まずは「Enemy2Controller.cs」を立ち上げて、以下のコード(1行だけ)を追加します。

❶登場シーンが終わったところで、子要素のシールドを削除するプログラムです。
Enemy1のシールドを削除したプログラムと同じです。

//敵の登場とその後の動き(シールドの削除のみ追記)
IEnumerator Move()
{
    transform.position = new Vector3(Random.Range(-15f,15f), 12f, 0); //記述済み
    enemyRb2d.velocity = new Vector2(0, -1f);           //記述済み 
    yield return new WaitForSeconds(3);                 //記述済み
    enemyRb2d.velocity = transform.up * 0;              //記述済み
    yield return new WaitForSeconds(0.5f);              //記述済み 
    Destroy(transform.GetChild(0).gameObject);          //❶シールドを削除す
    IsMove = true;                                      //記述済み
    while (transform.position.y>-10f)                   //記述済み 
    {
        float moveX = Random.Range(-7.0f, 7.0f);        //記述済み 
        enemyRb2d.velocity = transform.right * moveX;   //記述済み 
        yield return new WaitForSeconds(2);             //記述済み 
        enemyRb2d.velocity = transform.right * 0;       //記述済み
        yield return new WaitForSeconds(0.5f);          //記述済み
        enemyRb2d.velocity = new Vector2(0, -2f);       //記述済み
        yield return new WaitForSeconds(1);             //記述済み 
    } 
Destroy(gameObject);                                    //記述済み
}

これで「Enemy2」が完成しました。

⑩最後にProjectにドラッグ&ドロップで、プレファブ化しておきましょう。

Unityで作る「シューティングゲーム」Vol.17

「Enemy2」ですが、「Enemy1」が倒されたタイミングで画面上部から出現するようにします。
ということは「Enemy1」のプログラムを改造する必要がありそうですね?
「Enemy2Controller.cs」を立ち上げて以下のコードを追加します。

❷生成する「Enemy2」のプレファブを変数で指定。

❸自分自身が倒されて削除されるタイミングで、指定した「Enemy2」をInstantiate()関数で生成します。

[SerializeField] GameObject enemy2;     //❷Enemy2プレハブ
private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.tag == "Projectile" && IsMove) //記述済み
    {
        Destroy(collision.gameObject); //記述済み 
        hp--; //記述済み 
        if (hp == 0)               //記述済み
        {
            GameObject effect = Instantiate(explosion, transform.position, transform.rotation); //済み 
            Destroy(effect, 1.5f); //記述済み Destroy(gameObject); //記述済み 
            gameManager.enemyCount--;                              //記述済み 
            gameManager.AddScore(100);                             //記述済み 
            Instantiate(enemy2);  //❸Enemy2の生成 
        }
    }
}

これで「GameManager」が6体の敵(Enemy1)を作り、それぞれ倒されたタイミングで新たな敵(Enemy2)が発生するプログラミングができました。

⑪ 最後は❷で指定した変数「Enemy2」に⑩で作成した「Enemy2」のプレファブを指定します。

Unityで作る「シューティングゲーム」Vol.17

だいぶにぎやかなゲームになってきました。
次回は何をしようかな?
今のプログラムではEnemy1を6体倒したら、再度Enemy1が6体出てきますね?
このループを2回にして、いったん「BOSS」を出現させてみたいと思います。

今回はここまでです。

教室では実際に通って頂いての授業の他、ちょっとしたお困りごとに対するオンライン授業やオンラインサポートも行っております。お困りごとのある方、ご興味がある方は、ぜひお問い合わせください。
お問い合わせは こちら から。
体験授業のお申込みは こちら から。

無料体験授業 いつでも受け付けています!

体験授業を受ける子供

スクラッチ、Unityでちょっとしたゲームを作ってみる

HTMLやCSSでWebサイト作成体験

初めてパソコンやタブレットに触れてみる

エクセルやワード、パワーポイントの学習をちょっと体験

まずは1時間程度の無料体験授業を受けて、教室の雰囲気や講師の人柄に触れて頂き、ご自身、お子様に合うのかどうかご確認ください!