Сделай себе два скрипта, первый будет для всех объектов в игре, которые обладают здоровьем, это могут быть персонажи (твой игрок, враги), предметы (двери, стены и т.п.)
У этих объектов будет скрипт, назовем его Health.cs
[SerializedField] private int hitpoints = 100;
public Action<int, int> OnChange;
public void Change(int amount)
{
hitpoints += amount;
OnChange?.Invoke(hitpoints, amount);
}
В этом скрипте можно будет менять здоровье через функцию Change, причем в любую сторону, может проходить и урон, так и лечение, все зависит от знака в переданной переменной amount. Также скрипт бросает событие, что здоровье изменилось, чтобы другие скрипты могли подписаться и отреагировать. Например, скрипт, который рисует полосу здоровья или скрипт, который отвечает за смерть персонажа.
Второй скрипт - Damage.cs. Он будет работать на триггерах в Unity, и когда объекты пересекаются между собой, то происходит вызов функции урона, например, если персонаж встанет в огонь, его затронет пуля или меч. Само собой нужно проставить им триггеры нужного размера, как объекту с уроном, так и тому, кому наносится урон + поставить правильно матрицу коллизий, чтобы OnTriggerEnter2D не затрагивал другие объекты, которые не являются его целью.
[SerializedField] private int amount = -10;
public Action<int> OnDamage;
private void OnTriggerEnter2D(Collider2D collider)
{
collider.gameObject.GetComponent<Health>().Change(amount);
OnDamage?.Invoke(amount);
}