Unity-Breakout Game with a Healthbar

I’m making a breakout game, and I wanted to add a healthbar that decreases when the ball touches a certain object with the tag “hazard”. I have a Game Manager Script, and A Pickup interact script, but with the way I set it up, I’m kind of confused with how to trigger takedamage from my GM script to my pickup script, considering I put my playerhealth elements into my GM script, so I can attach it to empty gameobject call Game Manager, since the actual player isnt in the hierarchy, but instantiated during runtime. I’m hoping I don’t have to redo the whole thing just for this purpose. If someone could help me figure this out, I’d appreciate it.

Here’s my GM script

public class GM : MonoBehaviour
{

   public int lives = 3;
   public int bricks = 20;
   public float resetDelay = 1f;
   public Text livesText;

   public GameObject gameOver;
   private GameObject clonePaddle;
   public GameObject youWon;
   public GameObject bricksPrefab;
   public GameObject paddle;
   public GameObject deathParticles;
   public static GM instance = null;

   public int startingHealth = 100;
   public int currentHealth;
   public Slider healthSlider;

   bool isDead;
   bool damaged;



   void Awake()
   {
       currentHealth = startingHealth;
       TakeDamage(10);

       if (instance == null)
           instance = this;
       else if (instance != this)
           Destroy(gameObject);

       Setup();

   }

   public void TakeDamage(int amount)
   {
       damaged = true;

       currentHealth -= amount;
       healthSlider.value = currentHealth;

       if (currentHealth <= 0)
       {
           LoseLife();
       }

   }

   public void Setup()
   {
       clonePaddle = Instantiate(paddle, transform.position, Quaternion.identity) as GameObject;
       Instantiate(bricksPrefab, transform.position, Quaternion.identity);
   }


   void CheckGameOver()
   {
       if (bricks < 1)
       {
           youWon.SetActive(true);
           Time.timeScale = .25f;
           Invoke("Reset", resetDelay);
       }

       if (lives < 1)
       {
           gameOver.SetActive(true);
           Time.timeScale = .25f;
           Invoke("Reset", resetDelay);
       }

   }

   void Reset()
   {
       Time.timeScale = 1f;
       Application.LoadLevel(Application.loadedLevel);
   }

   public void LoseLife()
   {
       lives--;
       livesText.text = "Lives: " + lives;
       Instantiate(deathParticles, clonePaddle.transform.position, Quaternion.identity);
       Destroy(clonePaddle);
       Invoke("SetupPaddle", resetDelay);
       CheckGameOver();
   }

   void SetupPaddle()
   {
       clonePaddle = Instantiate(paddle, transform.position, Quaternion.identity) as GameObject;
   }

   public void DestroyBrick()
   {
       bricks--;
       CheckGameOver();
   }
}

And Here’s my Pickup Script:

public class Pickups : MonoBehaviour {

   public float PaddleSpeedValue = 0.5f;

   private bool isActive = false;

   public float thrust=20f;

   public Rigidbody rb;

   GameObject player;



   private void OnTriggerEnter(Collider other)
   {
        if (other.tag == "Hazard")
       {
           isActive = true;
           Destroy(other.gameObject);
       }
   }

}

Make the healthbar and make it a singleton too or use a delegate (UnityAction) in GM and register on it from the healthbar (if the healthbar cant be a singleton or cant contain static elements)

You could even kill it by making “health” a static in the player, because i think you cant have multible health values at once right?
Then you can read that static from the healthbar just representing that value

Your game manager is a singleton, so you can access it anywhere via it’s static ‘instance’ field. For example in your OnTriggerEnter code:

private void OnTriggerEnter(Collider other)
{
    if (other.tag == "Hazard")
    {
        GM.instance.TakeDamage(10);

        isActive = true;
        Destroy(other.gameObject);
    }
}