Assets/Scripts/HealthController.cs (37 lines of code) (raw):

using System; using UnityEngine; using UnityEngine.Events; using UnityEngine.Serialization; public class HealthController : MonoBehaviour { public int health = 100; public int currentHealth; [SerializeField] private GameObject explosion; [SerializeField] private AudioClip explosionAudioClip; [SerializeField] private UnityEvent onBeforeDestroy; private AudioManager audioManager; private bool isExploding = false; private void Start() { currentHealth = health; audioManager = GameObject.FindGameObjectWithTag("AudioManager")?.GetComponent<AudioManager>(); } public void DealDamage(int damage) { currentHealth = Math.Max(0, currentHealth - damage); if (currentHealth <= 0 && !isExploding) { isExploding = true; var explosionGameObject = Instantiate(explosion, transform.position, Quaternion.Euler(0, 0, 0)); audioManager?.PlaySfx(explosionAudioClip); onBeforeDestroy?.Invoke(); Destroy(gameObject, 0.5f); Destroy(explosionGameObject, 1f); if (!gameObject.CompareTag("Player")) { GameObject.FindWithTag("GameController")?.GetComponent<GameController>()?.IncrementScore(); } } } }