using UnityEngine; using UnityEngine.UI; public class ManaSystem : MonoBehaviour { public static ManaSystem Instance { get; private set; } [Header("能量配置")] [Min(1)] public int maxMana = 10; [Min(0f)] public float manaRegenRate = 1f; [Header("UI 引用")] public Image[] manaBeads; private float currentMana; private float manaRegenTimer; public float CurrentMana => currentMana; public int CurrentManaInt => Mathf.FloorToInt(currentMana); private void Awake() { if (Instance != null && Instance != this) { Destroy(gameObject); return; } Instance = this; } private void Start() { currentMana = maxMana; UpdateManaUI(); } private void Update() { if (currentMana < maxMana) { manaRegenTimer += Time.deltaTime; if (manaRegenTimer >= manaRegenRate) { manaRegenTimer = 0f; currentMana = Mathf.Min(currentMana + 1f, maxMana); UpdateManaUI(); } } } public bool TryConsumeMana(int cost) { if (CurrentManaInt < cost) { return false; } currentMana -= cost; if (currentMana < 0f) { currentMana = 0f; } UpdateManaUI(); return true; } public void AddMana(int amount) { currentMana = Mathf.Min(currentMana + amount, maxMana); UpdateManaUI(); } private void UpdateManaUI() { if (manaBeads == null || manaBeads.Length == 0) { return; } int fullBeads = CurrentManaInt; for (int i = 0; i < manaBeads.Length; i++) { if (manaBeads[i] != null) { manaBeads[i].enabled = i < fullBeads; } } } }