見出し画像

5-3敵にHP追加する【Unityゲーム開発の基礎】作って学ぶブロック崩し

ブロック崩しを作りながらUnityを学んでいこう!
フェーズ1で「ブロック崩しの骨格」を作り
フェーズ2で「見た目をかっこよく」して
フェーズ3で「タイトル画面やゲームオーバーなどの画面」を作って
フェーズ4では「アニメーション」させることができました。

フェーズ5の目標は「ステージの作成」です。

複数のステージを作ったら敵にもバリエーションが欲しくなりますね。
今回は敵にHP(ヒットポイント)を追加して、何度かボールを当てないと倒せない仕組みを追加してみます。


敵のスクリプトでHPを制御

敵用のスクリプト EnemyBehaviour に最大HPと現在のHPを管理するメンバ変数を追加します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EnemyBehaviour : MonoBehaviour
{
    public GameObject hitImpact;
    public int maxHP = 1;                                  //←コレを追加
    private int currentHP;                                 //←コレを追加
    private EnemyUnitBehaviour enemyUnit;



    public void Startup(EnemyUnitBehaviour unit)
    {
        currentHP = maxHP;                                 //←コレを追加
        this.enemyUnit = unit;
        this.gameObject.SetActive(true);
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (null == enemyUnit) return;
        if (collision.gameObject.tag == "Ball")
        {
            if (1 < currentHP)                             //←コレを追加
            {
                this.currentHP -= 1;                       //←コレを追加
            }
            else
            {
                GameObject hit = (GameObject)Instantiate(hitImpact);
                hit.transform.position = this.transform.position;

                this.gameObject.SetActive(false);
                enemyUnit.OnEnemyDead();
            }
        }
    }
}

最大HPを管理する maxHP はInspectorから値を変えられるようにpublic で宣言しています。現在のHPを管理するため変数が currentHP です。
そして、ステージ開始時に呼び出される Startupメソッドの中で cnrrentHP を初期化します。
さらに、ボールが当たった時の処理を少し改良します。currentHPが残っていたらHPを減らして0になったらこれまでの壊れる処理を行うようにします。


残りHPによって敵の色を変える

せっかくなので敵の残りHPが分かるように色を変える仕組みも追加してみましょう。

    private void SetEnemyColor()
    {
        if (3 <= currentHP)
            this.GetComponentInChildren<SpriteRenderer>().color = Color.magenta;
        else if (2 == currentHP)
            this.GetComponentInChildren<SpriteRenderer>().color = Color.yellow;
        else if (1 >= currentHP)
            this.GetComponentInChildren<SpriteRenderer>().color = Color.white;
    }

EnemyBehaviour に↑こんな感じのメソッドを追加します。
GetComponentInChildrenで自身のコンポーネントへアクセスできます。 SpriteRendererコンポーネントのカラーを変更することで色を変化させます。

このメソッドをHPが変化するタイミングで呼び出すようにします。

public class EnemyBehaviour : MonoBehaviour
{
       :

    public void Startup(EnemyUnitBehaviour unit)
    {
        currentHP = maxHP;
        SetEnemyColor();                             //←コレを追加
          :
    }

       :
       :

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (null == enemyUnit) return;
        if (collision.gameObject.tag == "Ball")
        {
            if (1 < currentHP)
            {
                this.currentHP -= 1;
                SetEnemyColor();                     //←コレを追加
            }
            else
            {
                  :
                  :
            }
        }
    }
}


これが今回の成果です。


つづく


次回:5-4ボールの動きをイイ感じにする (予定)


いいなと思ったら応援しよう!

この記事が参加している募集