P15

【UNITY】タワーディフェンス4 敵頭上にHPバーを表示する

今回はゲームでよくみる敵の頭上にあるHPバーを表示させてみましょう!

1

HPバーの作成

HPバーをSlider(スライダー)を使って作って行きます。

まず、Create > UI > Slider でスライダーを追加します。

スライダーは画面にアタッチされたとおもいます。スライダーには通常「つまみ」がありますが、今回は外から操作はしないので消してしまいます。

Sliderの中の「Handle Slide Area」がつまみのところなのでこれを消します。(選択して右クリック>Delete)

2

スライダーが敵の頭上に来るように調整

Enemyフォルダ(敵)の中にCanvasフォルダごと入れてしまいます。ここではCanvasをHPCanvasに名前を変えてあります。また、SliderをHPBarに変えてあります。

Canvasの調整

Canvas(カンバス/キャンバス)の設定を変えて行きます。今回は、頭上に表示するのでRender Modeを「World Space」にかえます。その他のパラメーターも図のように変更していきます。

Slider部分の設定

スライダーの設定を、敵の頭上にくるように、変えていきます。

スライダーないのFillArea(バーが値によって上下する箇所)を図のように設定します。

スライダーないのFill(バーが値によって上下するイメージ)を図のように設定します。

3

攻撃を受けるたびにHPを減らし、HPが0になったら消すようにする

今まで、BulletCont.cs(弾側)で弾あたった場合、「敵」を消していましたが、今回からHPが0になったら「敵」を消すひつようがあります。ですから、BulletCont.cs(弾側)の「敵」を消す処理をコメントアウトします。その後、EnemyCont.cs(敵側)でHPを管理し、HPが0になったら自ら(敵)を消す処理に変えます。

[BulletCont.cs]

「敵」にアタッチされているスクリプト(EnemyCont.cs)を編集していきます。

[EnemyCont.cs]

まずはじめに、以下の変数を定義します。

 public int enemyHP;// 敵の最大HP
 private int wkHP;  // 敵の現在のHP

 public Slider hpSlider;     //HPバー(スライダー)

次にStart()で定義した変数を初期化します。

void Start () {
   hpSlider.value = (float)enemyHP;//HPバーの最初の値(最大HP)を設定
   wkHP = enemyHP; // 現在のHPを最大HPに設定
}

次に敵が弾にあたったときによばれるOnTriggerEnter()メソッドを編集します。

    private void OnTriggerEnter(Collider other)
    {
        Debug.Log(“OnTrriger En”);
        // あたった場合敵を削除
        if (other.gameObject.tag == “bullet01”)
        {
            wkHP -= 50;//一度当たるごとに50をマイナス
            hpSlider.value =  (float)wkHP / (float)enemyHP;//スライダは0〜1.0で表現するため最大HPで割って少数点数字に変換
            // HPが0以下になった場合、自らを消す
            if (wkHP == 0)
            {
                //Debug.Log(“Destroy”);
                Destroy(gameObject, 0f);
            }

                 }
         }

最後にpublic変数の定義をして完了です。