HPbarzissou

This commit is contained in:
ohgushiyuga
2026-08-27 17:59:06 +09:00
parent 52341100ed
commit 9864b95a91
48 changed files with 3379 additions and 19467 deletions

View File

@@ -0,0 +1,74 @@
using UnityEngine;
using UnityEngine.UI;
public class EnemyHealthBar : MonoBehaviour
{
[Header("UI設定")]
[SerializeField] private Slider hpSlider;
[SerializeField] private EnemyHealth targetEnemyHealth;
[Header("追従設定")]
[Tooltip("敵の原点から頭上へどれだけ浮かせるか(メートル)")]
[SerializeField] private Vector3 offset = new Vector3(0, 2.0f, 0);
private Transform targetTransform;
private Transform mainCameraTransform;
private void Start()
{
// ターゲットのEnemyHealthを自動検索
if (targetEnemyHealth == null)
{
targetEnemyHealth = GetComponentInParent<EnemyHealth>();
}
if (targetEnemyHealth != null)
{
targetTransform = targetEnemyHealth.transform;
targetEnemyHealth.OnHealthChanged += UpdateHp;
targetEnemyHealth.OnDeath += HandleDeath;
UpdateHp(targetEnemyHealth.CurrentHealth, targetEnemyHealth.MaxHealth);
}
if (Camera.main != null)
{
mainCameraTransform = Camera.main.transform;
}
}
private void OnDestroy()
{
if (targetEnemyHealth != null)
{
targetEnemyHealth.OnHealthChanged -= UpdateHp;
targetEnemyHealth.OnDeath -= HandleDeath;
}
}
private void LateUpdate()
{
if (targetTransform == null || mainCameraTransform == null) return;
// 1. 敵の頭上に位置を追従
transform.position = targetTransform.position + offset;
// 2. 常にカメラの向きへ正対(ビルボード処理:鏡像反転を防ぐためカメラの向きと平行にする)
transform.forward = mainCameraTransform.forward;
}
private void UpdateHp(float current, float max)
{
if (hpSlider != null)
{
hpSlider.maxValue = max;
hpSlider.value = current;
}
}
private void HandleDeath()
{
// 敵が死んだらバーを即座に非表示
gameObject.SetActive(false);
}
}