StaminaBar.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. staminaBar = GameObject.Find("StaminaBar").GetComponent<Slider>();
  17. currentStamina = maxStamina;
  18. if (staminaBar)
  19. {
  20. staminaBar.maxValue = maxStamina;
  21. staminaBar.value = currentStamina;
  22. }
  23. }
  24. private void Update()
  25. {
  26. if (playerController)
  27. {
  28. if (playerController.bIsSprinting && currentStamina > 0)
  29. {
  30. currentStamina -= drainRate * Time.deltaTime;
  31. lastStaminaUseTime = Time.time;
  32. }
  33. else if (currentStamina < maxStamina && !playerController.bIsSprinting)
  34. {
  35. if (Time.time >= lastStaminaUseTime + regenDelay)
  36. {
  37. currentStamina += regenRate * Time.deltaTime;
  38. }
  39. }
  40. currentStamina = Mathf.Clamp(currentStamina, 0, maxStamina);
  41. if (staminaBar)
  42. {
  43. staminaBar.value = currentStamina;
  44. }
  45. playerController.bCanSprint = currentStamina > 0;
  46. }
  47. }
  48. }