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

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

HPバーの作成
HPバーをSlider(スライダー)を使って作って行きます。
まず、Create > UI > Slider でスライダーを追加します。

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

Canvasの調整
Slider部分の設定
攻撃を受けるたびにHPを減らし、HPが0になったら消すようにする

今まで、BulletCont.cs(弾側)で弾あたった場合、「敵」を消していましたが、今回からHPが0になったら「敵」を消すひつようがあります。ですから、BulletCont.cs(弾側)の「敵」を消す処理をコメントアウトします。その後、EnemyCont.cs(敵側)でHPを管理し、HPが0になったら自ら(敵)を消す処理に変えます。
[BulletCont.cs]
private void OnTriggerEnter(Collider other) | |
{ | |
Debug.Log("OnTrriger bu"); | |
//Instantiate(explosion, this.transform.position, Quaternion.identity); | |
//Destroy(other.gameObject, .1f); | |
// あたった場合敵を削除 | |
if (other.gameObject.tag == "Enemy" || other.gameObject.tag == "Defender") | |
{ | |
Instantiate(explosion, this.transform.position, Quaternion.identity); | |
Destroy(gameObject, .0f); | |
// ↓↓↓↓ 今回はここをコメントアウト | |
//Destroy(other.gameObject, .0f); | |
} else { | |
Instantiate(explosion, this.transform.position, Quaternion.identity); | |
Destroy(gameObject, .0f); | |
} | |
} |
「敵」にアタッチされているスクリプト(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);
}
}
}
using System.Collections; | |
using System.Collections.Generic; | |
using UnityEngine; | |
using UnityEngine.UI; | |
public class EnemyCont : MonoBehaviour { | |
// 敵のヒットポイントを設定 | |
public int enemyHP; | |
private int wkHP; | |
public Slider hpSlider; | |
// Use this for initialization | |
void Start () { | |
hpSlider.value = (float)enemyHP; | |
wkHP = enemyHP; | |
} | |
// Update is called once per frame | |
void Update () { | |
// スライダーの向きをカメラ方向に固定 | |
hpSlider.transform.rotation = Camera.main.transform.rotation; | |
} | |
void OnCollisionEnter(Collision collision) | |
{ | |
Debug.Log ("OnColider En"); | |
// 敵に衝突したものが弾(tag:bullet01)だった場合、弾を削除 | |
if (collision.gameObject.tag == "bullet01") | |
{ | |
} | |
} | |
// 衝突した瞬間に呼ばれる | |
private void OnTriggerEnter(Collider other) | |
{ | |
Debug.Log("OnTrriger En"); | |
// あたった場合敵を削除 | |
if (other.gameObject.tag == "bullet01") | |
{ | |
wkHP -= 50; | |
hpSlider.value = (float)wkHP / (float)enemyHP; | |
Debug.Log("HP" + hpSlider.value + "--" + wkHP); | |
if (wkHP == 0) | |
{ | |
//Debug.Log("Destroy"); | |
Destroy(gameObject, 0f); | |
} | |
} | |
} | |
} |