using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; // Code sourced from Jason Welmann's tutorial "Health Bars in Unity3D - Quick, Clean, Easy" https://www.youtube.com/watch?v=CA2snUe7ARM&ab_channel=JasonWeimann public class HealthBar : MonoBehaviour { [SerializeField] private Image foregroundImage; [SerializeField] private float updateSpeedSeconds = 0.5f; private void Awake() { GetComponentInParent().OnHealthChanged += HandleHealthChanged; } private void HandleHealthChanged(float pct) { StartCoroutine(ChangeToPct(pct)); } private IEnumerator ChangeToPct(float pct) { float preChangePct = foregroundImage.fillAmount; float elapsed = 0f; while (elapsed < updateSpeedSeconds) { elapsed += Time.deltaTime; foregroundImage.fillAmount = Mathf.Lerp(preChangePct, pct, elapsed / updateSpeedSeconds); yield return null; } foregroundImage.fillAmount = pct; } private void LateUpdate() { transform.LookAt(GameObject.Find("OmniCharacterController/CameraSetupParent/CameraSetupRootOffset/[CameraRig]/Camera").transform); transform.Rotate(0, 180, 0); } }