こんにちは、カバゴトです!今回は、プレイヤーにHPバーを付ける方法について超初心者向けに解説していきたいと思います!
完成形は以下のようになります!
下準備
「Game Object」→「3D Object」→「Cube」・「Plane」・「Capsule」を出します。
右クリック→「Rename」で名前を変えます。”Cube”→”Player”・”Capsule”→”Enemy”
HPバーのUI作成
Hierarchyバーの「+」→「UI」→「Canvas」をクリックします。
「Canvas」を「Player」の子要素にします。(CanvasをPlayerにドラッグ&ドロップすることで子要素にできます)
「Canvas」を右クリック→「UI」→「Slider」をクリックします。
「Rect Transform」の値をこのようにします。
また、「Max Value」と「Value」を100にします。
「Slider」の子要素にある「Background」のインスペクタビューを右のような座標・大きさ・色にします。
同様に、「Slider」の子要素の「Fill Area」と「Fill Area」の子要素の「Fill」のインスペクタビューを右のような座標・大きさ・色にします。
HPバーのつまみの部分は今回は不要なので、「Handle Slide Area」は右クリック「Delete」で削除しておきます。
HP管理のスクリプト作成
「Assets」→「Create」→「C#Script」でスクリプト「Player Health」を作ります。
HP管理のスクリプトは以下の通りです。Playerにアタッチしてください。
using UnityEngine;
using UnityEngine.UI;
public class PlayerHealth : MonoBehaviour
{
public float maxHealth = 100f; // 最大HP
private float currentHealth; // 現在のHP
public Slider healthBar; // HPバーのスライダー
void Start()
{
// 現在のHPを最大値に設定
currentHealth = maxHealth;
// HPバーの初期値を設定
healthBar.value = currentHealth;
}
// 敵に触れた時に呼ばれるメソッド
void OnCollisionEnter(Collision collision)
{
// 接触したオブジェクトが"enemy"タグを持っているか確認
if (collision.gameObject.tag == "enemy")
{
Debug.Log("Enemyに接触しました: " + collision.gameObject.name); // デバッグログ
// HPを減少させる処理
TakeDamage(10f); // 例えば、10ダメージを与える
}
}
// HPを減らす関数
public void TakeDamage(float damage)
{
// デバッグログで現在のHPとダメージを表示
Debug.Log("ダメージを受けました: " + damage);
Debug.Log("現在のHP (減少前): " + currentHealth);
// HPを減少
currentHealth -= damage;
// HPバーを更新
healthBar.value = currentHealth;
// デバッグログで現在のHPを表示
Debug.Log("現在のHP (減少後): " + currentHealth);
// HPが0以下になったらプレイヤーが死ぬ処理
if (currentHealth <= 0)
{
Die();
}
}
// プレイヤーが死亡したときの処理
void Die()
{
Debug.Log("プレイヤーが死亡しました。");
// ここにゲームオーバーやリスタート処理を追加できます。
}
}
このスクリプトでは、プレイヤーのHPを管理し、敵と衝突した際にHPを減少させます。HPが0になると、プレイヤーが死亡したと判断します。
Playerの移動スクリプト作成
同様に、「Assets」→「Create」→「C#Script」でスクリプト「Player Movement」を作ります。
Playerの移動スクリプトは以下の通りです。Playerにアタッチしてください。
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5f; // 移動速度
void Update()
{
// 移動方向のベクトルを初期化
Vector3 move = Vector3.zero;
// プレイヤーの入力を取得 (WASDキー)
if (Input.GetKey(KeyCode.W))
{
move += Vector3.forward; // 前進
}
if (Input.GetKey(KeyCode.S))
{
move += Vector3.back; // 後退
}
if (Input.GetKey(KeyCode.A))
{
move += Vector3.left; // 左移動
}
if (Input.GetKey(KeyCode.D))
{
move += Vector3.right; // 右移動
}
// 入力に基づいてプレイヤーを移動させる
transform.Translate(move * moveSpeed * Time.deltaTime);
}
}
このスクリプトで、wasdキーでPlayerが移動できるようにしています。
タグや当たり判定の設定
「Player」に「Add Component」→「Rigid Body」を付けます。
「Enemy」の「Tag」を「enemy」にします。(Add Tagで追加してください)
「Player Health」の「Health Bar」を「Slider」にします。
これで完成です!(オブジェクト・カメラの位置は適宜設定してください)
実際に動かしてみる
このような感じになりました!デバックもできてます!
終わりに
最後まで読んでくださりありがとうございます!今回は、プレイヤーにHPバーを付ける方法ついて解説しました。もし、うまくいない場合や意見等あればコメントの方をよろしくお願いします!
この記事が参考になれば幸いです。また、次回のブログでお会いしましょう!
コメント