StaminaBar.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. public class StaminaBar : MonoBehaviour
  4. {
  5. public PlayerController playerController;
  6. public Slider staminaBar;
  7. public float maxStamina = 100f;
  8. public float currentStamina;
  9. public float drainRate = 20f;
  10. public float regenRate = 5f;
  11. public float regenDelay = 20f;
  12. private float lastStaminaUseTime;
  13. private void Start()
  14. {
  15. playerController = GameObject.Find("Player").GetComponent<PlayerController>();
  16. currentStamina = maxStamina;
  17. staminaBar.maxValue = maxStamina;
  18. staminaBar.value = currentStamina;
  19. }
  20. private void Update()
  21. {
  22. if (playerController)
  23. {
  24. if (playerController.bIsSprinting && currentStamina > 0)
  25. {
  26. currentStamina -= drainRate * Time.deltaTime;
  27. lastStaminaUseTime = Time.time;
  28. }
  29. else if (currentStamina < maxStamina && !playerController.bIsSprinting)
  30. {
  31. if (Time.time >= lastStaminaUseTime + regenDelay)
  32. {
  33. currentStamina += regenRate * Time.deltaTime;
  34. }
  35. }
  36. currentStamina = Mathf.Clamp(currentStamina, 0, maxStamina);
  37. if (staminaBar)
  38. {
  39. staminaBar.value = currentStamina;
  40. }
  41. playerController.bCanSprint = currentStamina > 0;
  42. }
  43. }
  44. }